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

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

Mary-Kate Olsen
發布: 2024-12-17 01:21:25
原創
380 人瀏覽過

Why Does Floating-Point Comparison in C Sometimes Produce Unexpected Results?

浮點比較異常

浮點比較的概念可能會產生誤導,尤其是在處理浮點資料類型時。考慮以下範例:

直觀上,人們可能會假設此程式碼會輸出“0 是正確的”,因為初始條件為 false。然而,令人驚訝的是,實際輸出是「1 是正確的。」

解釋

解釋在於浮點數的內部表示。在 C 中,浮點數在比較過程中會提升為雙精度數,且雙精度數比浮點數更精確。因此,浮點型 0.7 與雙精確度型 0.7 並不完全相同。當 0.7(作為浮點數)提升為 double 時,它會變得略小於 0.7(作為 double)。

另一方面,0.5(作為浮點數)恰好是 double 的精確表示精確。因此,當條件b<1時,計算 0.5 時,它會傳回 false,因為 0.5(作為雙精度數)不小於自身。

解決方案

要解決此問題,可以:

  1. 將float 更改為double
  2. 將float 更改為🎜>:透過將🎜> a 和b 聲明為雙精確度,確保它們在比較過程中不會提升,並且將獲得預期的行為。
  3. 為文字加上 f 字尾
:將後綴 f 附加到文字,您明確指示他們應該被視為浮動。這將防止在比較過程中提升為雙打。

透過實現這些解決方案中的任何一個,您可以獲得所需的輸出「0 是正確的」。

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

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