浮點比較混亂
在給定的程式碼片段中,浮點數之間的比較檢查並不像人們想像的那麼簡單。在處理浮點比較時,了解浮點表示和出現的潛在陷阱非常重要。
浮點陷阱
問題碼在於浮點數的比較。浮點數以二進位格式存儲,使用有限位數來表示幅度和指數。這意味著浮點數表示某些值的精度存在固有的限制,導致舍入誤差。
在提供的程式碼中,變數 a 和 b 都定義為浮點數。當比較 a 和 0.7 時,編譯器將 float 提升為 double 進行比較。這種類型提升可能會導致精度損失,因為 a 的雙精度表示形式可能不完全等於 0.7。此外,0.5 是 2 的精確冪,可以用浮點格式精確表示。
因此,比較 a
由於 a 提升為雙精度且 0.7 的表示不精確,0.7 將評估為 true。這解釋了意外輸出「1 是正確的」而不是預期的「0 是正確的」。確保正確比較
為了避免此類問題,有兩個方法可能的方法:以上是為什麼浮點比較不準確,如何確保結果正確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!