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