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尽可能精确?
如果old_x和center很接近,那么您就会失去精度。
这就是所谓的意义丧失
您可以更改计算,以便最终发生减法:
center = (max_x + min_x) / 2
new_x = (center + (old_x * factor)) - (center * factor)
Run Code Online (Sandbox Code Playgroud)