2014-01-10 56 views
0

我想比较在while循环整数,如下图所示:Matlab的 - 整数比较错误

Sigma_Wanted_Start = 0.000; 
Sigma_Wanted_End = 0.009; 
Sigma_Increment = 0.001; 
Sigma_Current  = 0.000; 

while (Sigma_Wanted_End ~= Sigma_Current) 
    Sigma_Current = Sigma_Current + Sigma_Increment; 
end 

如果Sigma_Wanted_End == 0.009,那么我们将停止for循环。问题是,即使Sigma_Wanted_End == Sigma_Current,该陈述显示为true

另一个奇怪的是,如果Sigma_Wanted_End == 0.008,那么while循环会停止。

我认为这是整数和double之间的差异,所以我在所有数字上都使用了double,但问题仍然存在。

有人知道为什么吗?

在此先感谢

+2

这些值并不像整数给我。 –

+0

Sigma_Current是0,没有小数,所以我加了0.000以查看问题是否存在。但问题仍然存在。 – user1157751

+3

你不会用浮点数来做到这一点。见例如http://floating-point-gui.de/errors/comparison/以获取更详细的解释。另外,写'x = 0'不会导致'x'是一个整数数据类型。 – sebastian

回答

2

比较浮点值的时候,你不应该测试确切的平等,由于提供的有限精度。取而代之的是这样的:

while (Sigma_Current < Sigma_Wanted_End) 
    Sigma_Current = Sigma_Current + Sigma_Increment; 
end 
+1

不知何故,我早先没想到这个!谢谢你的帮助!现在我知道我应该更加小心浮点值。 – user1157751

1

由于舍入问题,matlab中的浮点表示并不相等。

让的说,如果我们有

x = 0.3 
0.4-0.1 
x==y 

这会给你假 ,所以你能做到这一点

Sigma_Wanted_Start = 0.000; 
Sigma_Wanted_End = 0.009; 
Sigma_Increment = 0.001; 
Sigma_Current = 0.000; 
while (~((Sigma_Wanted_End - Sigma_Current)<0.0)) 
    Sigma_Current = Sigma_Current + Sigma_Increment; 
end