對我來說,Matlab將floor(5-eps) < 5
評估爲false似乎很荒謬。其實,即使floor(5-2*eps) < 5
也是假的。爲什麼floor(5 - 2 * eps)<5 false?
這是我會考慮一個錯誤,因爲eps
只是大約1e-16
- 遠離最小雙倍值。 Matlab返回false是否有特定的原因?那裏有什麼想法?
對我來說,Matlab將floor(5-eps) < 5
評估爲false似乎很荒謬。其實,即使floor(5-2*eps) < 5
也是假的。爲什麼floor(5 - 2 * eps)<5 false?
這是我會考慮一個錯誤,因爲eps
只是大約1e-16
- 遠離最小雙倍值。 Matlab返回false是否有特定的原因?那裏有什麼想法?
你想用eps(x)
,不只是eps
EPS(X)是由ABS(X)的正距離,以相同精度下一個數值較大浮點數爲X.
事實上,如果你比較x
和x+eps(x)
十六進制表示,通常應該由一個位尾數不同:
>> format hex
>> x = 5
x =
4014000000000000
>> x + eps(x)
ans =
4014000000000001
'x + eps(x)'的過度簡化應該是:'typecast(typecast(x,'uint64')+ 1,'double')'(顯然這並不總是有效) – Amro 2014-11-05 16:48:32
嘗試用'eps(5)'替換'eps',看看會發生什麼。 – 2014-11-05 16:31:06
@HighPerformanceMark:+1剛剛看到你的評論,希望你不介意:) – Amro 2014-11-05 16:33:48
非常感謝,我剛剛看到你的評論,我不知道eps拿了一個參數!當我讓我看到下面的答案時。 – Sheljohn 2014-11-05 16:35:01