3

我正在尝试在 for 循环中测试迭代变量的值,但我没有得到我期望的结果,所以我假设我误解了 matlab 的工作方式和/或我正在做一些可怕的事情错误的....

有人可以解释为什么当 x 达到 0.2 时,此代码中的 if 语句不会测试为 true 吗?:

start = -1;
stop = 1;
interval = 0.01;

for x = start:interval:stop
    if x == 0.20
        disp('it worked')
    end
end

但是这段代码确实测试为真:

start = 0;
stop = 1;
interval = 0.01;

for x = start:interval:stop
    if x == 0.20
        disp('it worked')
    end
end

我尝试了一堆不同的起始值,它们是否工作似乎是随机的......为什么改变起始值会改变输出?

如果我更改测试值(即 0.2 到 0.8 或其他值),我也会看到类似的不一致

我错过了什么?

4

1 回答 1

4

您正在使用 测试浮点数==。请注意,这-1+120*.01==0.2是错误的,因为它们在浮点表示中不相等。 0.01*20==0.2碰巧是真的。相反,请使用容差,例如if abs(x-0.20)<1e-10

于 2013-03-20T03:11:10.953 回答