f32 docs: define 'arithmetic' operations · patricklam/verify-rust-std@93a72da
@@ -1219,22 +1219,25 @@ mod prim_f16 {}
12191219///
12201220/// # NaN bit patterns
12211221///
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.
12251223///
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".
12291229/// - a payload, which makes up the rest of the significand (i.e., the mantissa) except for the
1230-/// quiet/signaling bit.
1230+/// quiet bit.
12311231///
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.
12351237///
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:
12381241///
12391242/// - **Preferred NaN**: The quiet bit is set and the payload is all-zero.
12401243/// - **Quieting NaN propagation**: The quiet bit is set and the payload is copied from any input
@@ -1273,10 +1276,10 @@ mod prim_f16 {}
12731276/// (e.g. `min`, `minimum`, `max`, `maximum`); other aspects of their semantics and which IEEE 754
12741277/// operation they correspond to are documented with the respective functions.
12751278///
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.
12801283///
12811284/// ### Target-specific "extra" NaN values
12821285// FIXME: Is there a better place to put this?