Expand description
Making floating-point behave: ordering, equivalence, hashing, and constraints for floating-point types.
Decorum provides traits that describe types using floating-point representations and provides proxy types that wrap primitive floating-point types. Proxy types implement a total ordering and constraints on the classes of values that they may represent.
Floating-Point Classes
Traits, proxy types, and constraints are based on three classes or subsets of floating-point values:
Class | Trait |
---|---|
real number | Real |
infinity | Infinite |
not-a-number | Nan |
Primitive floating-point values directly expose IEEE-754 and therefore the
complete set of values (and traits). Proxy types implement traits that are
compatible with their constraints, so types that disallow NaN
s do not
implement the Nan
trait, for example.
Proxy Types
Proxy types wrap primitive floating-point types and constrain the classes of values that they can represent:
Type | Aliases | Trait Implementations | Disallowed Values |
---|---|---|---|
Total | Encoding + Real + Infinite + Nan + Float | ||
NotNan | N32 , N64 | Encoding + Real + Infinite | NaN |
Finite | R32 , R64 | Encoding + Real | NaN , -INF , +INF |
The NotNan
and Finite
types disallow values that represent NaN
,
$\infin$, and $-\infin$. Operations that emit values that violate these
constraints will panic. The Total
type applies no constraints and
exposes all classes of floating-point values.
Total Ordering
The following total ordering is implemented by all proxy types and is
provided by traits in the cmp
module:
$$-\infin<\cdots<0<\cdots<\infin<\text{NaN}$$
Note that all zero and NaN
representations are considered equivalent. See
the cmp
module documentation for more details.
Equivalence
Floating-point NaN
s have numerous representations and are incomparable.
Decorum considers all NaN
representations equal to all other NaN
representations and any and all NaN
representations are unequal to
non-NaN
values.
See the cmp
module documentation for more details.
Modules
Structs
Floating-point proxy that provides a total ordering, equivalence, hashing, and constraints.
Traits
Floating-point encoding.
Floating-point representations.
Floating-point representations that expose infinities.
Floating-point representations that expose NaN
s.
Primitive floating-point types.
Types that can represent real numbers.
Converts floating-point values into a canonicalized form.
Type Definitions
Floating-point representation that must be a real number.
32-bit floating-point representation that cannot be NaN
.
64-bit floating-point representation that cannot be NaN
.
Floating-point representation that cannot be NaN
.
32-bit floating-point representation that must be a real number.
64-bit floating-point representation that must be a real number.
Floating-point representation with total ordering.