3个版本
0.1.2 | 2022年2月25日 |
---|---|
0.1.1 | 2022年2月22日 |
0.1.0 | 2022年2月21日 |
874 在 数学 中排名
888 每月下载量
用于 9 个包(3 直接)
11KB
132 行
fsum
是Piotr Beling编写的Rust库,用于计算浮点数的精确总和。
示例
use fsum::FSum;
assert_eq!(FSum::new().add(1e100).add(1.0).add(-1e100).value(), 1.0);
assert_eq!(FSum::with_all((0..10).map(|_| 0.1)).value(), 1.0);
assert_eq!(FSum::with_all(&[1e100, 1.0, -1e100]).value(), 1.0);
let mut s = FSum::new();
assert_eq!(s.value(), 0.0);
s += 3.0;
assert_eq!(s.value(), 3.0);
s -= 1.0;
assert_eq!(s.value(), 2.0);
复杂度
求和 n 个数的复杂度从 O(n)(乐观)到 O(n²)(悲观)
- 时间:从 O(1)(乐观)到 O(n)(悲观)
- 内存:从 O(1)(乐观)到 O(n)(悲观)
通常复杂度接近乐观。
参考
计算代码基于(主要复制自)sum
方法实现的 test::stats::Stats
的 f64
(这可能会重新实现Python库中的 math.fsum
)和CPython的源代码。另见
- https://github.com/python/cpython/blob/2b7411df5ca0b6ef714377730fd4d94693f26abd/Lib/test/test_math.py#L647
- https://bugs.python.org/file10357/msum4.py
- http://code.activestate.com/recipes/393090/
该方法牺牲了性能以换取精度,依赖于IEEE-754算术保证。有关正确性的证明,请参阅自适应精度浮点算术和快速鲁棒几何谓词