精度误差,两个数学上相同的表达式在零附近

时间:2018-03-06 13:20:50

标签: matlab precision

当绘制两个非常接近零的数学上等效的表达式时,我们得到两个相似的结果,但其中一个曲线有步而不是平滑。

1-cosh(x) == -2*sinh(x/2)^2

Zero sum

现在快速观察一下,步骤的高度确实等于Matlab的精度,即变量eps = 2.2204e-16 = 2^-52

这个图表的名称是“零和”,显然没有引用零和游戏。但显然这只会在添加(或减法)非常接近零的结果时发生。

然而,据我所知,浮点数(或双精度)的计算精度相似,无论计算的大小如何。因此,当一些非常小的东西被操作时,我会发现错误只会蔓延,在这种情况下,较小的数字会四舍五入。

Matlab代码重现了这一点:

x = linspace(-5*10^-8, 5*10^-8, 1001);
y1 = @(x) 1 - cosh(x);
y2 = @(x) -2*(sinh(x/2)).^2;

plot(x,y1(x),'k',x,y2(x),'r')
legend('1-cosh(x)', '-2sinh(x/2)^2')

有人能解释一下这个有用吗?

1 个答案:

答案 0 :(得分:2)

舍入发生在cosh函数中。如果您绘制它并以相同的比例放大图形,您将看到相同的阶梯效果,但在y轴上以1为中心。

这是因为你不能使用双精度表示那些中间值。