Expand description
Ordering and comparisons.
This module provides traits and functions for comparing floating-point and
other partially ordered values. For primitive floating-point types, a total
ordering is provided via the FloatEq and FloatOrd traits:
$$-\infin<\cdots<0<\cdots<\infin<\text{NaN}$$
Note that both zero and NaN have more than one representation in IEEE-754
encoding. Given the set of zero representations $Z$ and set of NaN
representations $N$, this ordering coalesces -0, +0, and NaNs such
that:
$$ \begin{aligned} a=b&\mid a\in{Z},~b\in{Z}\cr[1em] a=b&\mid a\in{N},~b\in{N}\cr[1em] n>x&\mid n\in{N},~x\notin{N} \end{aligned} $$
These same semantics are used in the Eq and Ord implementations for
ContrainedFloat, which includes the Total, NotNan, and Finite type
definitions.
§Examples
Comparing f64 values using a total ordering:
use core::cmp::Ordering;
use decorum::cmp::FloatOrd;
use decorum::Nan;
let x = f64::NAN;
let y = 1.0f64;
let (min, max) = match x.float_cmp(&y) {
Ordering::Less | Ordering::Equal => (x, y),
_ => (y, x),
};Computing a pairwise minimum that propagates NaNs:
use decorum::cmp;
use decorum::Nan;
let x = f64::NAN;
let y = 1.0f64;
// `Nan` is incomparable and represents an undefined computation with respect to
// ordering, so `min` is assigned a `NaN` value in this example.
let min = cmp::min_or_undefined(x, y);Traits§
- Equivalence relation for floating-point primitives.
- Total ordering of primitive floating-point types.
- Partial ordering of types with intrinsic representations for undefined comparisons.
Functions§
- Partial maximum of types with intrinsic representations for undefined.
- Partial minimum of types with intrinsic representations for undefined.