17个版本
0.2.0 | 2021年3月27日 |
---|---|
0.1.14 | 2021年2月21日 |
0.1.13 | 2020年9月6日 |
0.1.12 | 2019年12月21日 |
0.1.2 | 2016年9月12日 |
#121 in 数学
200,243 每月下载量
在 149 个 Crate 中使用 (49 个直接使用)
54KB
1.5K SLoC
noisy_float-rs
这是一个包含浮点类型的Rust库,如果将它们设置为非法值(如NaN)则会触发panic。
Crate
该库的Rust crate可以在这里找到。
文档
该库的文档可以在这里找到。
描述
"Noisy Float"这个名字来源于"quiet NaN"和"signaling NaN"这两个术语;"signaling"这个词太长了,不适合用在结构体/库的名称中,所以用"noisy"代替,因为它是"quiet"的反义词。
noisy_float::types
中定义的标准类型遵循Rust处理整数溢出的原则:不良的算术操作被视为错误,但在优化构建中检查每个位置都过于昂贵。对于创建的每个浮点数,都会使用debug_assert!
调用来检查其是否有效。这样,在开发代码时可以保证浮点数具有有效值,但在发布运行时,与直接使用f32
或f64
相比,使用这些浮点类型没有额外的开销。
此crate使用了流行的num_traits
crate中的num、bounded、signed和浮点特性。此crate可以与no_std一起编译。
示例
使用对应于有限f64
值的R64
类型的示例。
use noisy_float::prelude::*;
fn geometric_mean(a: R64, b: R64) -> R64 {
(a * b).sqrt() //used just like regular floating-point numbers
}
println!("geometric_mean(10.0, 20.0) = {}", geometric_mean(r64(10.0), r64(20.0)));
//prints 14.142...
使用 N32
类型的示例,该类型对应于非 NaN 的 f32
值。由于不允许使用 NaN,此 crate 中的浮点类型能够正确实现 Eq 和
Ord
。
use noisy_float::prelude::*;
let values = vec![n32(3.0), n32(-1.5), n32(71.3), N32::infinity()];
assert!(values.iter().cloned().min() == Some(n32(-1.5)));
assert!(values.iter().cloned().max() == Some(N32::infinity()));
许可证
Noisy_float 采用 Apache 2.0 许可证。
依赖
~95–335KB