首頁 > 後端開發 > C++ > 為什麼浮點比較不準確,如何確保結果正確?

為什麼浮點比較不準確,如何確保結果正確?

Patricia Arquette
發布: 2024-12-19 17:26:10
原創
1054 人瀏覽過

Why Are Floating-Point Comparisons Inaccurate, and How Can I Ensure Correct Results?

浮點比較混亂

在給定的程式碼片段中,浮點數之間的比較檢查並不像人們想像的那麼簡單。在處理浮點比較時,了解浮點表示和出現的潛在陷阱非常重要。

浮點陷阱

問題碼在於浮點數的比較。浮點數以二進位格式存儲,使用有限位數來表示幅度和指數。這意味著浮點數表示某些值的精度存在固有的限制,導致舍入誤差。

在提供的程式碼中,變數 a 和 b 都定義為浮點數。當比較 a 和 0.7 時,編譯器將 float 提升為 double 進行比較。這種類型提升可能會導致精度損失,因為 a 的雙精度表示形式可能不完全等於 0.7。此外,0.5 是 2 的精確冪,可以用浮點格式精確表示。

因此,比較 a

由於 a 提升為雙精度且 0.7 的表示不精確,0.7 將評估為 true。這解釋了意外輸出「1 是正確的」而不是預期的「0 是正確的」。

確保正確比較

為了避免此類問題,有兩個方法可能的方法:
  • 使用雙精度數而不是浮點數:
  • 定義a 和b為雙精度數(double a = 0.7; double b = 0.5;),您可以確保以雙精度數的完整精度執行比較,從而降低舍入錯誤的風險。
  • 使用浮點後綴:
  • 或者,您可以將 f 後綴附加到浮點文字,以強制編譯器在比較期間將它們視為浮點數。這種方法可讓您保持浮點類型,同時仍確保正確的精確度:if (a

以上是為什麼浮點比較不準確,如何確保結果正確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板