检验算法中的数值精度
Checking Numerical Precision in Algorithms
检查算法中的数值精度的最佳实践是什么?对于"我们如何知道我们计算的结果是正确的"这个问题,有没有什么建议的技术来解决?如果可能的话:在c++中有一些数值精度增强的例子吗?
谢谢你的建议!
Math::BigFloat/Math::BigInt会有所帮助。我必须说有很多图书馆都这样做,我不知道哪个是最好的。也许别人会给你一个好的答案。
一般来说,你可以写两次:一次具有无限的精度,另一次没有验证这两个。这就是我对自己编写的科学软件所做的。然后我将编写第三个实现更出色的速度增强的程序。这样我就能证实这三个。请注意,我知道这三者并不完全相等,但它们应该有足够的有效数字来佐证。
要真正知道有多少误差是很难准确获得的——记住浮点数的操作顺序可能会导致很大的差异。这确实是特定问题,但如果你知道某些数字的相对大小,你可以改变操作顺序以获得准确性(例如,按排序顺序乘以一个列表)。有两个地方可以研究这个
- 浮点算术手册
- 每个计算机科学家都需要知道的浮点运算。
- 浮点数解析
看一下区间算术,例如
http://www.boost.org/doc/libs/1_53_0/libs/numeric/interval/doc/interval.htm生成结果的上界和下界
PS:也可以看看http://www.cs.cmu.edu/~quake/robust.html
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 基于ELO的团队匹配算法
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++选择排序算法中的逻辑错误
- 正在将csv文件读取为双精度矢量
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 比较操作员的数值精度
- 具有 IEEE 754 浮点双精度数据类型的安全往返整数值
- 为什么 STL 数值算法使用 'op' 而不是 'op='?
- 在C++中标记双精度损失的算法不会标记正确的位置
- 节拍器精度算法数学
- 为什么我的双精度或整数值在除法后总是 0
- 物理引擎的数值积分有哪些好算法
- 光线投射算法中的精度问题
- 检验算法中的数值精度
- 一些浮点精度和数值限制问题
- 对于需要精度的定点,最好的乘法算法是什么
- 计算乘数和除数值的优化算法