首頁 > 後端開發 > C++ > 為什麼比較'float”和'double”值有時會傳回'false”,即使它們看起來相同?

為什麼比較'float”和'double”值有時會傳回'false”,即使它們看起來相同?

Barbara Streisand
發布: 2024-11-01 18:19:30
原創
758 人瀏覽過

Why does comparing `float` and `double` values sometimes return `false` even when they appear identical?

比較Double 和Float 資料型時出現意外結果

比較雙精確度浮點數(double) 與單精確度浮點數時數字(浮點數),你可能會遇到意想不到的結果。具體來說,即使兩個值看起來相同,浮點變數 f 和雙精確度變數 d 之間的相等檢查 (f == d) 也可能傳回 false。

此行為源自於與浮點相關的兩個基本因素 -點數:精確度和捨去。

精確度與捨入誤差

  • 精確度:浮點數儲存的位數有限,這決定了它們可以表示的值的準確性。某些數字,例如十進制中的 1/3,具有無限的十進位表示形式,無法在不損失精度的情況下精確儲存。
  • 舍入: 當浮點值轉換為二進位時,它可能無法準確表示某些十進位值。例如,十進制的 0.1 在二進位中表示為無限的數字序列。因此,浮點數會進行舍入以適應其範圍。

相等檢查的含義

浮點數固有的精度和舍入-點數可能會導致舍入誤差,尤其是在比較彼此非常接近的值時。這些錯誤累積,導致相等比較失敗。這使得對浮點數的直接相等性檢查不可靠,並且容易出現漏報。

解:與Epsilon 比較

不使用相等性檢查,而是使用更可靠的方法比較浮點數的方法是取它們之間的絕對差,並檢查它是否低於一個稱為epsilon (ε) 的小值。這使您可以考慮舍入誤差並確定差異對於您的應用程式是否微不足道。

if (abs(x - y) < epsilon)
登入後複製

以上是為什麼比較'float”和'double”值有時會傳回'false”,即使它們看起來相同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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