浮點比較異常
浮點比較的概念可能會產生誤導,尤其是在處理浮點資料類型時。考慮以下範例:
直觀上,人們可能會假設此程式碼會輸出“0 是正確的”,因為初始條件為 false。然而,令人驚訝的是,實際輸出是「1 是正確的。」
解釋
解釋在於浮點數的內部表示。在 C 中,浮點數在比較過程中會提升為雙精度數,且雙精度數比浮點數更精確。因此,浮點型 0.7 與雙精確度型 0.7 並不完全相同。當 0.7(作為浮點數)提升為 double 時,它會變得略小於 0.7(作為 double)。
另一方面,0.5(作為浮點數)恰好是 double 的精確表示精確。因此,當條件b<1時,計算 0.5 時,它會傳回 false,因為 0.5(作為雙精度數)不小於自身。
解決方案
要解決此問題,可以:
以上是為什麼 C 語言中的浮點比較有時會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!