#nan #float #floating-point #panic #finite #ord

noisy_float

包含浮点类型,如果将它们设置为非法值(如NaN)则会触发panic

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 数学

Download history 19686/week @ 2024-03-14 19040/week @ 2024-03-21 19369/week @ 2024-03-28 22855/week @ 2024-04-04 26065/week @ 2024-04-11 26458/week @ 2024-04-18 27456/week @ 2024-04-25 33928/week @ 2024-05-02 32965/week @ 2024-05-09 50448/week @ 2024-05-16 45122/week @ 2024-05-23 50812/week @ 2024-05-30 49438/week @ 2024-06-06 51578/week @ 2024-06-13 48530/week @ 2024-06-20 39117/week @ 2024-06-27

200,243 每月下载量
149 Crate 中使用 (49 个直接使用)

Apache-2.0

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!调用来检查其是否有效。这样,在开发代码时可以保证浮点数具有有效值,但在发布运行时,与直接使用f32f64相比,使用这些浮点类型没有额外的开销。

此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 类型的示例,该类型对应于非 NaNf32 值。由于不允许使用 NaN,此 crate 中的浮点类型能够正确实现 EqOrd

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