簡體   English   中英

嘗試表示 2^(-23) 時,無法在單精度 IEEE-754 中掌握“轉換引起的錯誤”

[英]Trouble grasping "error due to conversion" in single-precision IEEE-754 when attempting to represent 2^(-23)

讓我先說這個問題,我理解為什么諸如0.13.140.2之類的值和其他不能由兩個冪的組合組合的值最終無法用 IEEE-754 格式表示,並且它們可能只能近似為最佳精度允許。

我無法理解的是為什么嘗試表示值2 -23會導致輕微的誤差。

2 -23正好等於1.1920928955078e-70.00000011920928955078 在單精度 IEEE-754 中,它可以構造如下:

  • 符號位為0
  • 偏置指數為104 (或二進制為0b01101000 )以說明 127 偏置,導致-23成為最終指數值
  • 尾數的位域完全由0組成,當隱含的1位被計算在內時,其最終值為1.0

然而,將這個特定的位序列存儲在 memory 中並以十進制表示法打印出來,小數點后有 25 位精度,結果如下:

0.0000001192092895507812500
                      ^
                      |
                      margin of error starts here

該值恰好包含1.25e-21的錯誤。 此交互式網站上,此錯誤值稱為“轉換導致的錯誤”。

我很難理解這一點——因為我理解,例如,為什么像+3.14這樣的值不能用單精度位域精確表示。 由指數中的值縮放的尾數中兩個負冪的組合不能精確表示3.14 ,因此選擇下一個最接近的近似值。 因此,預計會出現“由於轉換而導致的錯誤”。 與此相反,值2 -23可以准確地存儲在單精度位域中,但是當轉換回十進制表示法時,會出現錯誤。

顯然我有某種誤解,但我無法弄清楚到底在哪里。

2 -23實際上並不完全等於1.1920928955078e-7

我用來執行計算的軟件將結果截斷了三位數字...... 2 -23的精確值恰好是0.000000119209289550781251.1920928955078125e-7 ,這是我之前觀察到的 output ,使其正確,沒有任何誤差。


同樣毫無意義的是,該網站提前將尾數的十進制表示形式截斷了幾位,使得手工計算(即,將尾數與符號位和 2指數相乘)看起來不正確(或至少略有偏差),當它們是事實上不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM