2014-11-05 73 views
2

對我來說,Matlab將floor(5-eps) < 5評估爲false似乎很荒謬。其實,即使floor(5-2*eps) < 5也是假的。爲什麼floor(5 - 2 * eps)<5 false?

這是我會考慮一個錯誤,因爲eps只是大約1e-16 - 遠離最小雙倍值。 Matlab返回false是否有特定的原因?那裏有什麼想法?

+3

嘗試用'eps(5)'替換'eps',看看會發生什麼。 – 2014-11-05 16:31:06

+0

@HighPerformanceMark:+1剛剛看到你的評論,希望你不介意:) – Amro 2014-11-05 16:33:48

+0

非常感謝,我剛剛看到你的評論,我不知道eps拿了一個參數!當我讓我看到下面的答案時。 – Sheljohn 2014-11-05 16:35:01

回答

4

你想用eps(x),不只是eps

EPS(X)是由ABS(X)的正距離,以相同精度下一個數值較大浮點數爲X.

事實上,如果你比較xx+eps(x)十六進制表示,通常應該由一個位尾數不同:

>> format hex 
>> x = 5 
x = 
    4014000000000000 
>> x + eps(x) 
ans = 
    4014000000000001 
+0

'x + eps(x)'的過度簡化應該是:'typecast(typecast(x,'uint64')+ 1,'double')'(顯然這並不總是有效) – Amro 2014-11-05 16:48:32