2014-01-10 55 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