首頁 > 後端開發 > C++ > 為什麼 0.1 在浮點運算中不能精確表示,而 0.5 卻可以?

為什麼 0.1 在浮點運算中不能精確表示,而 0.5 卻可以?

Mary-Kate Olsen
發布: 2025-01-15 07:49:13
原創
138 人瀏覽過

Why is 0.1 not represented exactly in floating-point arithmetic, while 0.5 is?

浮點精度:為什麼 0.5 是精確的,但 0.1 不是

浮點運算雖然對許多計算都很有效,但在精確表示所有十進制數字方面面臨著固有的局限性。 本文探討了為什麼 0.5 享有精確表示法而 0.1 則不然。

理解 0.1 的表示

IEEE 754 標準規定了浮點數的儲存方式。 讓我們來看看 0.1 的表示:

  • 符號: 0(正)。
  • 指數 (eeeee): 123。減去偏差 (127),我們得到有效指數 -4。
  • 尾數 (mmmmmmmmmmmmmmmmmmmmmm): 解釋為隱式前導「1」的二進位分數。 尾數位的總和約為 1.60000002384185791015625。

將尾數乘以 2-4 大約得出 0.100000001490116119384765625。 這是 0.1 的近似值,但不完全匹配。 二進位表示法的固有限制阻礙了十進位 0.1 的完美轉換。

0.5的精確表示

相較之下,0.5 有一個簡單的表示:

  • 符號: 0(正)。
  • 指數(eeeee): 126。有效指數(偏差調整後)為-1。
  • 尾數(mmmmmmmmmmmmmmmmmmmmmm): 0.

這表示 1 * 2-1 = 0.5,完美的表示。

結論:二元精確度的極限

差別在於二進位系統能夠準確表示某些十進位小數。 0.5 (1/2) 是 2 的冪,因此很容易用二進位表示,但 0.1 (1/10) 則不然。 當以浮點格式儲存 0.1 時,這會導致輕微的捨入誤差,從而導致觀察到的近似值。 在處理浮點數和精確度敏感的應用程式時,程式設計師必須注意這種固有的限制。

以上是為什麼 0.1 在浮點運算中不能精確表示,而 0.5 卻可以?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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