#sum #accurate #f64 #float #exact

fsum

用于计算浮点数精确总和的库

3个版本

0.1.2 2022年2月25日
0.1.1 2022年2月22日
0.1.0 2022年2月21日

874数学 中排名

Download history 725/week @ 2024-03-13 855/week @ 2024-03-20 565/week @ 2024-03-27 550/week @ 2024-04-03 657/week @ 2024-04-10 299/week @ 2024-04-17 157/week @ 2024-04-24 211/week @ 2024-05-01 192/week @ 2024-05-08 181/week @ 2024-05-15 415/week @ 2024-05-22 344/week @ 2024-05-29 222/week @ 2024-06-05 184/week @ 2024-06-12 164/week @ 2024-06-19 188/week @ 2024-06-26

888 每月下载量
用于 9 个包(3 直接)

MIT/Apache

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::Statsf64 (这可能会重新实现Python库中的 math.fsum)和CPython的源代码。另见

该方法牺牲了性能以换取精度,依赖于IEEE-754算术保证。有关正确性的证明,请参阅自适应精度浮点算术和快速鲁棒几何谓词

无运行时依赖