#error #floating-point #floating #propagation #analysis #point #error-handling

err_prop

超级简单(且愚蠢)的浮点误差传播计算类型

2 个版本

使用旧的 Rust 2015

0.0.2 2017 年 3 月 12 日
0.0.1 2017 年 3 月 10 日

#18 in #propagation

无许可证

15KB
526

err_prop 构建状态

超级简单(且愚蠢)的浮点类型计算误差传播的上限。我不保证这是正确的。如果你知道有更好的方法,请贡献! :)

工作原理

这是基于每个浮点运算都有误差的假设。加法和减法会生成实际误差,而乘法和除法只会增加那个误差:实现快照

val: self.val + rhs.val,
err: self.val.abs().max(rhs.val.abs()) + self.err + rhs.err

val: self.val - rhs.val,
err: self.val.abs().max(rhs.val.abs()) + self.err + rhs.err

val: self.val * rhs.val,
err: self.val.abs() * rhs.err + rhs.val.abs() * self.err

val: self.val / rhs.val,
err: self.err / rhs.val.abs() + rhs.err * self.val / (rhs.val * rhs.val)

完成你的计算后,使用 .err() 方法或更好的 .err_times_eps() 方法来获取累积误差的静态上限值

许多方法尚未实现!

有许多方法尚未实现!为什么?因为我需要提供它们,但我还没有实现,所以我只是放置了 unimplemented!().
最重要的 std::ops::* 已经实现,这就是为什么需要 cgmath 依赖。

+, - , *, /

为什么需要 cgmath 依赖?

因为我在使用 cgmath 库。不幸的是,要使用与 cgmath 自定义 num 类型,你必须依赖它们。:( 因为它们提供自己的 trait,必须实现。

依赖项

~1.5MB
~22K SLoC