6 个版本
0.1.5 | 2023 年 11 月 23 日 |
---|---|
0.1.4 | 2023 年 2 月 16 日 |
0.1.2 | 2023 年 1 月 24 日 |
0.1.1 | 2022 年 12 月 2 日 |
0.1.0 | 2022 年 11 月 26 日 |
#709 in Rust 模式
用于 netsblox-vm
14KB
195 行
一个与 no-std
兼容的 crate,它提供了对浮点类型的任意不变性进行封装的包装器。可以在类型上实现 FloatChecker
特质,以创建一个不变性检查器,然后可以在 CheckedFloat
类型中使用它来创建一个对所有操作强制执行不变性的包装器。
示例
以下是一个如何使用 checked-float
创建禁止 NaN 的浮点数包装器的示例。
# use checked_float::*;
#[derive(Debug)]
struct NanError;
struct NoNanChecker;
impl<T: Float> FloatChecker<T> for NoNanChecker {
type Error = NanError;
fn check(value: T) -> Result<T, Self::Error> {
if value.is_nan() { Err(NanError) } else { Ok(value) }
}
}
type NoNan64 = CheckedFloat<f64, NoNanChecker>; // our checked float wrapper
let y = NoNan64::new(0.0).unwrap(); // not nan, so we can unwrap
let x = NoNan64::new(2.0).unwrap(); // not nan, so we can unwrap
assert_eq!(x.powf(y).unwrap().get(), 1.0); // not nan, so we can unwrap
assert!(y.div(y).is_err()); // 0/0 is nan, so we get Err
no-std
支持
checked-float
默认支持在 no-std
环境中构建。然而,为了确保未来兼容性,您可能希望明确选择退出默认功能,以防将来添加对 std
的依赖。
[dependencies]
checked-float = { version = "...", default-features = false }
功能
名称 | 默认 | 描述 |
---|---|---|
serde |
关闭 | 启用 CheckedFloat 的序列化 |
依赖项
~480–730KB
~15K SLoC