Matlab 计算精度

Matlab 计算精度,matlab,floating-point,precision,floating-accuracy,Matlab,Floating Point,Precision,Floating Accuracy,如果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 使用“圆到最近”和“偶数

如果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
我们需要使用
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关闭。
这是一个乏味的演示,所以我的答案仍然只是一个猜测


最后一个减法运算将是精确的-请参见

,它可能会让您了解计算错误答案,从而解决渐进和完全的下溢问题。然而,
x/y
也可能溢出,导致其他问题。
x=2^52+2^51+1 , y=2^52+1 , x - (x/y)*y , y*eps(x/y)/2 > eps(x)/2