@@ -1219,22 +1219,25 @@ mod prim_f16 {}
1219
1219
///
1220
1220
/// # NaN bit patterns
1221
1221
///
1222
- /// This section defines the possible NaN bit patterns returned by non-"bitwise" floating point
1223
- /// operations. The bitwise operations are unary `-`, `abs`, `copysign`; those are guaranteed to
1224
- /// exactly preserve the bit pattern of their input except for possibly changing the sign bit.
1222
+ /// This section defines the possible NaN bit patterns returned by floating point operations.
1225
1223
///
1226
- /// A floating-point NaN value consists of:
1227
- /// - a sign bit
1228
- /// - a quiet/signaling bit
1224
+ /// The bit pattern of a floating point NaN value is defined by:
1225
+ /// - a sign bit.
1226
+ /// - a quiet/signaling bit. Rust assumes that the quiet/signaling bit being set to `1` indicates a
1227
+ /// quiet NaN (QNaN), and a value of `0` indicates a signaling NaN (SNaN). In the following we
1228
+ /// will hence just call it the "quiet bit".
1229
1229
/// - a payload, which makes up the rest of the significand (i.e., the mantissa) except for the
1230
- /// quiet/signaling bit.
1230
+ /// quiet bit.
1231
1231
///
1232
- /// Rust assumes that the quiet/signaling bit being set to `1` indicates a quiet NaN (QNaN), and a
1233
- /// value of `0` indicates a signaling NaN (SNaN). In the following we will hence just call it the
1234
- /// "quiet bit".
1232
+ /// The rules for NaN values differ between *arithmetic* and *non-arithmetic* (or "bitwise")
1233
+ /// operations. The non-arithmetic operations are unary `-`, `abs`, `copysign`, `signum`,
1234
+ /// `{to,from}_bits`, `{to,from}_{be,le,ne}_bytes` and `is_sign_{positive,negative}`. These
1235
+ /// operations are guaranteed to exactly preserve the bit pattern of their input except for possibly
1236
+ /// changing the sign bit.
1235
1237
///
1236
- /// The following rules apply when a NaN value is returned: the result has a non-deterministic sign.
1237
- /// The quiet bit and payload are non-deterministically chosen from the following set of options:
1238
+ /// The following rules apply when a NaN value is returned from an arithmetic operation: the result
1239
+ /// has a non-deterministic sign. The quiet bit and payload are non-deterministically chosen from
1240
+ /// the following set of options:
1238
1241
///
1239
1242
/// - **Preferred NaN**: The quiet bit is set and the payload is all-zero.
1240
1243
/// - **Quieting NaN propagation**: The quiet bit is set and the payload is copied from any input
@@ -1273,10 +1276,10 @@ mod prim_f16 {}
1273
1276
/// (e.g. `min`, `minimum`, `max`, `maximum`); other aspects of their semantics and which IEEE 754
1274
1277
/// operation they correspond to are documented with the respective functions.
1275
1278
///
1276
- /// When a floating- point operation is executed in `const` context, the same rules apply: no
1277
- /// guarantee is made about which of the NaN bit patterns described above will be returned. The
1278
- /// result does not have to match what happens when executing the same code at runtime, and the
1279
- /// result can vary depending on factors such as compiler version and flags.
1279
+ /// When an arithmetic floating point operation is executed in `const` context, the same rules
1280
+ /// apply: no guarantee is made about which of the NaN bit patterns described above will be
1281
+ /// returned. The result does not have to match what happens when executing the same code at
1282
+ /// runtime, and the result can vary depending on factors such as compiler version and flags.
1280
1283
///
1281
1284
/// ### Target-specific "extra" NaN values
1282
1285
// FIXME: Is there a better place to put this?
0 commit comments