检验算法中的数值精度

Checking Numerical Precision in Algorithms

本文关键字:数值精度 算法 检验      更新时间:2023-10-16

检查算法中的数值精度的最佳实践是什么?对于"我们如何知道我们计算的结果是正确的"这个问题,有没有什么建议的技术来解决?如果可能的话:在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