下面是我的matlab代码片段:
clear all;
x0=0.5;
x2=1.4;
h=0.1;
while(x0<x2)
x0=x0+0.1;
end
x0
毫无疑问,
x0
的结果是 1.4
,让我感到困惑的是,当我将 x2=1.4
替换为 x2=0.8, 0.9, 1.0, 1.1, or 1.2
(其中任何一个)时,结果变得不正确。例如,
x2=0.9
将使代码生成 x0=1.0
而不是 x0=0.9
。而且我发现在 x0
增加到 0.9
的过程中,x0<x2
( 0.9<0.9
) 会产生 1
(True) 这绝对是错误的。这里发生了什么?
最佳答案
我想稍微扩展一下丹的回答。运行此代码:
clear all;
x0=0.5;
x2=0.9;
h=0.1;
while(x0<x2)
x0=x0+0.1;
disp(x2-x0); % <-- I added this line
end
x0
输出( ideone ):
0.30000
0.20000
0.10000
1.1102e-16
-0.100000
x0 = 1.00000
输出的第 4 行显示了舍入误差:将
0.1
与 0.5
相加四次后,结果将小于 0.9
:差异是 1.1102e-16
。这就是为什么 x0
最终会是 1.0
的原因。关于matlab 将 0.9<0.9 评估为 `True`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22991628/