当绘制两个非常接近零的数学上等效的表达式时,我们得到两个相似的结果,但其中一个曲线有步而不是平滑。
1-cosh(x) == -2*sinh(x/2)^2
现在快速观察一下,步骤的高度确实等于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')
有人能解释一下这个有用吗?
答案 0 :(得分:2)
舍入发生在cosh
函数中。如果您绘制它并以相同的比例放大图形,您将看到相同的阶梯效果,但在y轴上以1为中心。
这是因为你不能使用双精度表示那些中间值。