【问题标题】:testing value of iteration in matlab for loop fails?在matlab for循环中测试迭代值失败?
【发布时间】:2013-03-09 00:05:57
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 哇,这很有趣。从初步检查中,如果你形成x = -1:0.01:1. 然后你做x(121) - 0.2 你基本上得到一个非常小的接近机器精度的数字。如果您将c 定义为c = x(121)-0.2,则输入x(121) == 0.2+c 答案是正确的,并且如前所述,c 接近机器精度。

标签: matlab if-statement for-loop


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2010-12-02
  • 2022-01-22
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多