13 个不稳定版本 (6 个破坏性更新)
0.7.0 | 2023年4月6日 |
---|---|
0.6.1 | 2022年11月17日 |
0.6.0 | 2022年9月30日 |
0.5.0 | 2022年4月21日 |
0.1.2 |
|
#543 in 算法
每月 2,062 次下载
在 4 个 crate 中使用 (3 直接)
130KB
3.5K SLoC
twofloat
为 Rust 提供的双精度算术库。
该库为 Rust 语言提供了双精度算术的实现。请注意,这不同于 IEEE 四倍精度浮点数格式。相反,通过将值表示为两个非重叠 f64
值的和来获得更高的精度。
在适当的地方为引用类型和值类型实现了运算符特质。代码指出了所用算法的来源。
数学常数可在 twofloat::consts
模块中找到,它提供与 std::f64::consts
相同的常数集。
请注意,数学函数(exp
、powf
等)的实现非常初步。特别是,它们使用与结果相同精度的运算来计算,因此不会返回与 TwoFloat
类型完全精确的值。这可能在未来的版本中得到解决。
可选功能
math_funcs
- 包含数学函数(默认启用)serde
- 使用 Serde 启用序列化和反序列化。std
- 使用 std 数学函数而不是 libm。
已知问题
- MinGW 的
fma
实现似乎在某些情况下给出错误的结果,因此在此平台上始终使用 libm 实现。
参考资料
-
Mioara Joldeș, Jean-Michel Muller, Valentina Popescu. 双字算术基本构建块的紧和严格误差界限。ACM 计算机科学协会数学软件交易,2017,44 (2),第 1-27 页。10.1145/3121432. hal-01351529v3
-
Alan H. Karp, Peter Markstein. 高精度除法和平方根。ACM 计算机科学协会数学软件交易,1997,23 (4),第 561-589 页。10.1145/279232.279237。
-
蔡维良,Joldeș M.,劳特C.。Sollya:用于开发数值代码的环境。数学软件 - ICMS 2010,第28-31页。
依赖项
约2MB
约49K SLoC