计算两个值的平均值,最大限度地减少错误

MxL*_*evs 8 algorithm floating-point numerical-analysis

我正在进行一些浮点计算,结果并不像我希望的那样准确.

这是算法:

...
center = (max_x + min_x) / 2
distance = old_x - center
new_x = center + (distance * factor)

return new_x

min_x,max_x和old_x都是浮点数.我相信当我取最大值和最小值的平均值时会引入最大误差,然后将误差乘以因子(可以是浮点数).

如何最小化FP计算引起的误差,以便new_x尽可能精确?

Yoc*_*mer 4

如果old_xcenter很接近,那么您就会失去精度。

这就是所谓的意义丧失

您可以更改计算,以便最终发生减法:

center = (max_x + min_x) / 2
new_x = (center + (old_x * factor)) - (center * factor)
Run Code Online (Sandbox Code Playgroud)

  • 精度损失对我来说很明显。我问为什么你的解决方案更好? (2认同)