计算精度

如果 x 和 y 都可以(精确地)以浮点形式存储在系统中,那么计算精度会是多少。

x - (x/y) * y

回答

在下溢的情况下,误差可能会很大x,例如,如果比率x/y完全消失并四舍五入为零。

例如,取x=2^-100, y=2^1000.

否则,如果 x/y 没有非规范化(不下溢),我的猜测是大多数时候你会得到一个完美的零,最多eps(x)-不时是 1 ulp(x),只要 Matlab引擎遵守 IEEE754 标准。

原因是这个:让我们注意舍入误差 e

float(x/y) = x/y + e

舍入到最近,甚至连 IEEE754 模式,我们有

abs(e) < ulp(x/y)/2

对于除法,这是一个严格的不等式,否则除法必须是精确的。如果它是准确的,我们确信商适合可用有效数(除非除法下溢)。

当我们乘以 y 时,我们得到了这个确切的结果:

x + e*y

我们需要e*y >= ulp(x)/2对这个确切的结果进行四舍五入 x
y*ulp(x/y)/2 > e*y >= ulp(x)/2
这可能发生,例如尝试:

x=2^52+2^51+1 , y=2^52+1 , x - (x/y)*y , y*eps(x/y)/2 > eps(x)/2

y*ulp(x/y)/2 > e*y >= 3*ulp(x)/2不能,所以结果不能是 2 ulp。
演示起来很乏味,所以我的回答仍然可以作为猜测。

最后的减法运算将是精确的 - 请参阅https://en.wikipedia.org/wiki/Sterbenz_lemma

  • Answer nicely addresses gradual and complete underflow. Yet `x/y` may overflow too leading to other problems.

以上是计算精度的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>