#numbers #float #floating-point #eft

safeeft

浮点数的安全和无分支错误转换算法

4个版本

使用旧的Rust 2015

0.0.5 2017年12月13日
0.0.4 2017年12月2日
0.0.3 2017年11月30日
0.0.2 2017年11月23日

#46 in #number

MIT 许可证

20KB
354

safeeft

浮点数的安全和无分支错误转换算法。

现在支持实现 num_traits::Float 的类型,并且其有效数字的位数是奇数(因为 Float 没有提供其大小)。

文档

基准测试

使用夜间编译器,执行

$cargo +nightly bench

如果您的CPU有 fma 目标功能,

$RUSTFLAGS='-C target-cpu=native'cargo +nightly bench --功能use-fma

如果您的CPU没有 fma 并使用此命令编译和运行,***_fma 将由于 fma 的软件模拟而运行得非常慢。

示例结果

  • 编译器:rustc 1.23.0-nightly
  • CPU:Intel Core i5-4570(Haswell)@3.20GHz

twosum

算法 时间 (ns) / 操作
twosum(不安全) 1.7530
safetwosum_branch 4.4827
safetwosum_straight 4.6438
safetwosum_fma 2.4749

split

算法 时间 (ns) / 操作
split(不安全) 0.8915
safesplit_branch(不安全) 1.1918
safesplit_straight 3.3454

twoproduct

算法 时间 (ns) / 操作
twoproduct(不安全) 2.9322
safetwoproduct_branch 3.7826
safetwoproduct_straight 12.9883
safetwoproduct_fma 0.7125

依赖项

~300KB