matlab - 在 matlab for loop 中测试迭代值失败?

标签 matlab if-statement for-loop

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

有人可以解释为什么当 x 达到 0.2 时这段代码中的 if 语句没有测试为真吗?:

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 或其他),我也会看到类似的不一致

我错过了什么?

最佳答案

您正在使用 == 测试 float .注意 -1+120*.01==0.2为假,因为它们在浮点表示中不相等。 0.01*20==0.2恰好是真的。相反,使用公差,例如if abs(x-0.20)<1e-10 .

关于matlab - 在 matlab for loop 中测试迭代值失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15514343/

相关文章:

java - 生命游戏 算法/if else 语句的结构

r - lapply 在 if 语句条件后需要 bool 值

arrays - 一维向量与三维数组相乘求和的向量化

arrays - Matlab将txt文件读入数组

c - 依赖于 3D 数组的 IF 循环的结束条件

python - 如何在单行 FOR 循环中简化列表数字的乘法?

c - 有没有办法在 gcc 中启用 for(int i=0; ... 而不必打开 c99 模式

python - 如何在 django 模板中设置页面范围的索引

python - 将无法向量化的 `for`循环转换为稀疏矩阵

matlab - 在 matlab 绘图的刻度标签中打印 '_' 作为下划线