Matlab解释计算错误

时间:2016-02-09 22:48:42

标签: matlab

在上一个问题中,有等式:

e = 1 – 3*((4/3) – 1) 

而不是0,而是:

e =2.2204e-16

我理解为什么会发生这种情况,因为4/3无法准确表示。

4/3的最近代表是:

1.3333333333333332593184650249895639717578887939453125

在必要的操作之后,获得e =2.2204e-16

现在,我无法理解涉及e的这些方程中的奇怪行为:

1)

 b = 1e-16 + 1 - 1e-16; 

 c = 1e-16 - 1e-16 + 1;

我们希望b等于c,但事实并非如此。我知道操作顺序和错误有些可疑,但我不完全理解为什么b不等于c

2)

sqrt(1e-16 + 1) - 1;
ans=0

现在,我怀疑当减法完成时,由于操作数几乎相等,所以有某种取消。但我仍然有点困惑,并希望得到详细的解释。谢谢。

1 个答案:

答案 0 :(得分:0)

即使在MATLAB中使用浮点数时,在比较这些值时也不准确。如果需要特定的精度水平,那么应该使用容差(相对误差,绝对误差等)等近似相等的断言。

检查Comparing Floating Point Numbers, 2012 Edition以及here。在MATLAB中,可以通过eps函数实现相对误差精度。