首頁 > 後端開發 > C++ > 為什麼在 C 中比較浮點數有時會產生意外的結果?

為什麼在 C 中比較浮點數有時會產生意外的結果?

Linda Hamilton
發布: 2024-12-19 04:18:09
原創
494 人瀏覽過

Why Does Comparing Floats in C   Sometimes Produce Unexpected Results?

了解C 中的浮點比較

在比較C 中的浮點值時,重要的是要意識到由於其精度有限。在提供的程式碼片段中,當將浮點數 a 和 b 分別與常數 0.7 和 0.5 進行比較時,觀察到意外輸出「1 is right」。

意外輸出的原因:

出現此問題的原因以下原因:

  • 隱式類型轉換:將float 與double 進行比較(例如,if (a
  • 浮點精度有限:浮點的精度低於雙精度,這意味著它們可以準確表示更少的小數位。因此,浮點型 0.7 可能與雙精度型 0.7 不完全相同。
  • 常數的精確表示:像 0.5 這樣的 2 的冪的常數可以精確表示為浮動和加倍。因此,b<1。即使 b 是稍微不準確的浮點數,0.5 仍然為 false。

解析度:

要取得預期輸出,您可以:

  • 使用雙精確度:將變數a 和b 改為雙精確度數(double a = 0.7; double b = 0.5;).
  • 使用浮點文字: 修改常數為浮點文字 (if (a

具有預期輸出的代碼:

在此更正的代碼中,a 和b 的比較它們各自的雙精度確保準確的精度,從而產生預期的輸出「0 是正確的。」

以上是為什麼在 C 中比較浮點數有時會產生意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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