操作顺序最大化精度

时间:2017-08-05 16:25:46

标签: c++ floating-point precision

我正在使用花车进行这些操作:

这两个中哪一个更准确?

  • (a * b)/ c

  • (a / c)* b

是否重要或是否取决于具体情况?如果是这样,我应该在哪些情况下选择哪个?

1 个答案:

答案 0 :(得分:4)

真的,如果你不使用双,那么你就被误导了,而你并不关心精确度。

否则,如果第一个结果略低于下一个更高的2的幂,则会得到最佳的误差范围。例如,计算(pi * e)/ sqrt(2),通过计算(e / sqrt(2))* pi得到最佳误差界限,因为e / sqrt(2)≈1.922接近2以下。结果关闭到下一个更高功率的两个具有较低的相对误差。

对于大量项目的加法和减法,最好先减去相等幅度和相反符号的项目(如果y /2≤x≤2y则精确计算x - y),否则组合数字给出尽可能小的结果。