strict-num-extended
Type-safe finite floating-point numbers for Rust.
A Rust library providing zero-cost finite floating-point types through the type system, guaranteeing safety by eliminating NaN and infinity values at compile time or runtime.
Features
- Type Safety - Catch floating-point errors at compile time or runtime
- Zero-Cost Abstractions - No performance overhead compared to built-in types except the additional value checking
- Comprehensive Constraints - Finite, Positive, Negative, NonZero, Normalized, NegativeNormalized, Symmetric, ...
- Full Trait Implementation - PartialEq, Eq, PartialOrd, Ord, Display, Debug, arithmetic operators
- Const Support - Create compile-time constants with validation
- Option/Result Arithmetic - Optional and fallible operations with automatic error propagation
- Type Conversions - Safe F32↔F64 conversions with precision detection
Available Types
| Type | Valid Range | Example |
|---|---|---|
FinF32 / FinF64 |
All real numbers | -∞ < x < ∞ |
PositiveF32 / PositiveF64 |
x ≥ 0 |
0.0, 1.5, 100.0 |
NegativeF32 / NegativeF64 |
x ≤ 0 |
0.0, -1.5, -100.0 |
NonZeroF32 / NonZeroF64 |
x ≠ 0 |
1.0, -1.0, 0.001 |
NonZeroPositiveF32 / NonZeroPositiveF64 |
x > 0 |
0.001, 1.0, 100.0 |
NonZeroNegativeF32 / NonZeroNegativeF64 |
x < 0 |
-0.001, -1.0, -100.0 |
NormalizedF32 / NormalizedF64 |
0.0 ≤ x ≤ 1.0 |
0.0, 0.5, 1.0 |
NegativeNormalizedF32 / NegativeNormalizedF64 |
-1.0 ≤ x ≤ 0.0 |
-0.5, -0.75, -1.0 |
SymmetricF32 / SymmetricF64 |
-1.0 ≤ x ≤ 1.0 |
-1.0, 0.0, 0.5, 1.0 |
Error Handling
All fallible operations return Result<T, FloatError> with detailed error information:
Error Types:
NaN- Value is Not a NumberPosInf- Value is positive infinityNegInf- Value is negative infinityOutOfRange- Value is outside the valid range for the target typeDivisionByZero- Division by zero occurredNoneOperand- Right-hand side operand is None in Option arithmetic
The FloatError enum provides comprehensive error information for proper error handling and debugging, allowing precise error matching and recovery strategies.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.