f32 docs: define 'arithmetic' operations · patricklam/verify-rust-std@93a72da (original) (raw)

`@@ -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?

`