#nan #panic #float #compare #floating-point #order

real_float

Floating point types that check for correctness and implement total ordering

4 releases (2 breaking)

0.3.0 May 21, 2022
0.2.0 Apr 24, 2022
0.1.1 Mar 31, 2022
0.1.0 Mar 28, 2022

#1259 in Math

Download history 16/week @ 2023-12-18 4/week @ 2023-12-25 7/week @ 2024-01-01 9/week @ 2024-01-08 25/week @ 2024-01-15 22/week @ 2024-01-22 28/week @ 2024-01-29 34/week @ 2024-02-05 92/week @ 2024-02-12 50/week @ 2024-02-26 41/week @ 2024-03-04 23/week @ 2024-03-11 24/week @ 2024-03-18 33/week @ 2024-03-25 49/week @ 2024-04-01

135 downloads per month
Used in 4 crates (via radians)

MIT/Apache

74KB
2K SLoC

real_float

Intro

This crate is for dealing checked floating point numbers. It exports three types: Real, Finite, and NonNeg. Real is checked at runtime to ensure that it is never NaN, while Finite adds the additional constraint that it can never be infinite, and NonNeg requires that it be positive.

For the sake of brevity, we will only discuss Real, but understand that everything applies to Finite and NonNeg as well.

Checking behavior

A NaN-check is inserted in every single operation and method. If a NaN ever surfaces, it will result in a runtime panic.

Note that these checks will normally only be present in debug builds. This is consistent with Rust's philosphy for integer overflowing: panic in debug mode, and allow fast-but-likely-incorrect bevhavior in release mode. If you want these checks to be present no matter what, enable the strict feature.

Fallible API

The types in this crate also support fallible APIs for any operation that would otherwise panic. These are the try_* methods defined on Real and Finite, and they will perform NaN checks whether or not debug mode is enabled.

Comparison with similar crates

TODO

License: MIT OR Apache-2.0

Dependencies

~39KB