2012-09-01 37 views
2

在我的代碼中,我需要檢查一個向量的兩個連續成員之間的差異對是否相等/不相等,然後相應地做一些事情。 現在,這裏是個奇怪的東西在Matlab中發生的說,如果我有一個兩成對的連續兩個數字的,所以當我使用Matlab中的非運算符行爲奇怪

(x(i+3) - x(i+2)) ~= (x(i+1)-x(i)) 

它給了我一個1即使雙方都是平等的。 我認爲原因是有一些四捨五入錯誤,但不是很確定。例如,

x = [0,0.16,0.32,0.48,0.64,0.80]; 
>>a = x(5) - x(4) 

a = 

0.1600 

>>b = x(4) - x(3) 

b = 

0.1600 

>>a-b 

ans = 

5.5511e-17 

任何想法如何擺脫這個問題?有沒有什麼不同的策略繞過~===運營商解決這個問題?

在此先感謝球員。

+0

爲什麼不只是檢查你比較的兩個數字的差異是否小於'epsilon'? – Ansari

回答

5

您不應該用這種方式比較浮點數的相等性。如果您正在測試平等,更可靠的方法是使用abs(a-b)<eps

+0

謝謝!不知道Matlab有一個最低機器精度的宏。 – as3rdaccount

+2

@ArunavDev MATLAB沒有宏,[/ url](http://www.mathworks.com/help/techdoc/ref/eps.html)是一個函數。 – Praetorian

+2

我可能會將測試建議爲:abs(a-b)<10 * eps(a)以獲得最佳結果。 – 2012-09-01 11:09:22