可能重複:
Manipulating and comparing floating points in java比較浮點數
我應該而在Java中比較浮點數使用的ε? Float.compare(float f1,float f2)靜態方法是否可以安全使用?
謝謝!
編輯:我想我明白了。
當我編寫3.6f的日食時,編譯器將這個數字解釋爲3.6。但是,當我編寫1.2f * 3.0f時,結果是3.6000001。雖然在數學上這是錯誤的,但這兩個結果顯然是不平等的。因此在檢查平等時需要有一個epsilon。
但是,當我在eclipse中寫入0.0f時,編譯器會嚴格將其解釋爲0,因爲IEEE 754能夠正確處理它。因此,確保浮動是正確的(值> 0.0f)是正確的。
我看到的唯一問題是當計算機不使用IEEE 754表示形式,而是使用不正確處理0的表示形式。
我對不對?
問題的答案取決於你想要做什麼。事實上,你是否應該使用浮點數也取決於它。解釋手頭的問題,只有這樣你才能得到有用的答案。 – 2011-05-07 20:07:01
以什麼方式安全?這是一個方便的方法,可以處理一些邊緣情況,但它不會阻止你或我創建自己的錯誤。另外,我在試圖實現我自己的等於浮點數的方法時使用了一個epsilon,但在比較它們時沒有。 – 2011-05-07 20:07:22
對不起,不夠具體。我正在爲遊戲寫作粒子。我想知道deltaTime(float)何時等於0.0,因爲我使用velocity = distance *(1/deltaTime)來計算速度。擁有無限的速度有點愚蠢。 現在我使用(Float.compare(deltaTime,0.0f)!= 0)來確保deltaTime大於0.0。 deltaTime不能小於0. – Klems 2011-05-07 20:23:34