提问人:Elizabeth Welz 提问时间:2/7/2021 最后编辑:Cris LuengoElizabeth Welz 更新时间:2/7/2021 访问量:95
计算的准确性
Accuracy of the computation
答:
5赞
aka.nice
2/7/2021
#1
在下溢的情况下,误差可能很大,例如,如果比率完全消失并四舍五入为零。x
x/y
例如,以 .x=2^-100, y=2^1000
否则,如果 x/y 没有非规范化(不会下溢),我的猜测是,只要 Matlab 引擎遵守IEEE754标准,您大部分时间都会得到一个完美的零,最多 - 即不时地为 1 ulp(x)。eps(x)
原因是这个:让我们注意舍入误差 e
float(x/y) = x/y + e
通过四舍五入到最接近,并列到偶IEEE754模式,我们有
abs(e) < ulp(x/y)/2
对于除法,这是一种严格的不等式,否则除法必须是准确的。如果它是准确的,我们确信商符合可用的有效数(除非除法下溢)。
当我们乘以 y 时,我们得到这个确切的结果:
x + e*y
我们需要将这个确切的结果四舍五入 x
即 。
这可能会发生,例如尝试:e*y >= ulp(x)/2
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
但不能,所以结果不能是 2 ulp off。 这很难证明,所以我的回答仍然只能作为猜测。y*ulp(x/y)/2 > e*y >= 3*ulp(x)/2
最后的减法运算将是精确的 - 参见 https://en.wikipedia.org/wiki/Sterbenz_lemma
评论
2赞
chux - Reinstate Monica
2/7/2021
很好地回答了逐渐和完全的下溢问题。然而,也可能溢出,导致其他问题。x/y
下一个:在matlab中加速程序
评论
eps(x)
可能会让您了解计算误差