10 个稳定版本
2.0.1 | 2024 年 4 月 19 日 |
---|---|
1.6.2 | 2023 年 9 月 26 日 |
1.6.1 | 2023 年 7 月 19 日 |
1.5.0 | 2023 年 5 月 18 日 |
0.1.0 | 2023 年 5 月 8 日 |
#886 在 Rust 模式
98 每月下载量
21KB
382 代码行
aprox_eq
Crate 用于确定近似等价性,尤其是在浮点数之间。这个库主要是一个快速导入和可派生的方法,用于减轻浮点误差。由于浮点数的工作方式,当量级增加时,会丢失准确的数字位数,而当量级降低时,会获得它们,因此简单的容忍度是不理想的。相反,aprox_eq
使用对浮点数标准背后的理解,并根据比较的浮点数的量级的浮点数标准的精度进行近似。这意味着查看尾数的位,即浮点数的分数部分,并将它们与一定范围的整数值进行比较,同时考虑浮点数的指数和符号的等价性。
TL;DR:随着你的浮点数越来越精确,aprox_eq
也越来越精确。
use aprox_eq::{assert_aprox_eq, assert_aprox_ne, AproxEq};
// You can derive the `AproxEq` trait the same way you can with `Eq` or `PartialEq`!
#[derive(AproxEq, Debug)]
struct MyStruct {
a: f32,
b: f64,
}
fn main() {
let x = MyStruct {
a: 3.2f32,
b: 4.8f64,
};
let y = MyStruct {
a: 3.2f32 - 1e-8,
b: 4.8f64 - 1e-14,
};
assert_aprox_eq!(x, y);
// Some normal size numbers
assert_aprox_eq!(1.0002_f64, 1.0001999999999999_f64);
assert_aprox_ne!(1.002_f64, 1.001_f64);
// Tiny numbers, `aprox_eq` now requires that the numbers are closer to
// eachother, since the float type can now store a higher precision
assert_aprox_eq!(0.000_000_001_f64, 0.000_000_001_000_000_000_000_001_f64);
assert_aprox_ne!(0.000_000_001_f64, 0.000_000_001_000_000_000_000_008_f64);
// Large numbers, `aprox_eq` will now allow the numbers to be a greater
// difference in value, since the float type has lost some precision
assert_aprox_eq!(1_000_000_000_f32, 1_000_000_010_f32);
assert_aprox_ne!(1_000_000_000_f32, 1_000_000_100_f32);
}
依赖项
~255–700KB
~17K SLoC