計算機組成原理 - 浮點數偏移量為127的理解
問題描述
學習浮點數時,發現 IEEE 754 浮點數的階碼偏移量規定為 127,而移碼偏移量一般為 128。
例如對於 8 位的數,映射關系為:
-128 - 0 - 127 (真值)
| | |
0 - 128 - 255 (移碼值)
即偏移 128。
為什么此處規定為 127 呢?
釋疑
關於移碼
以 8 位數為例,總共能表示 256 個數,把這些數加上一個固定的值,從而形成新的碼值(還是 8 位),這就是移碼的定義。例如,可以把有符號數映射到 0 - 255 的段上。
移碼的優勢:原來的大小關系不變,且一一對應(沒有兩種表示的 0),很容易判斷大小(如判斷是最小值或者最大值)。
關於浮點數
對於 256 個數,有兩個(相對)均衡的范圍:
-127 - 128
-128 - 127
兩個范圍使用移碼表示,去掉 00000000 和 11111111,也即去掉最小值和最大值(因為有特殊含義),為
-126 - 127
-127 - 126
反映到浮點數(32bit)上,第一種表達其范圍為:
\(\text{min}=1.0\times 2^{-126}=1.175\times 10^{-38}\)
\(\text{max}=(2-2^{-23})\times 2^{127}=3.4\times 10^{38}\)
第二種表達范圍為:
\(\text{min}=1.0\times 2^{-127}=5.877\times 10^{-39}\)
\(\text{max}=(2-2^{-23})\times 2^{126}=1.7\times 10^{38}\)
顯然第一種更為對稱。
因此使用 -126 - 127 的范圍,也即 -127 - 128 的范圍。此時要映射到 0 - 255 上,偏移值即為 127。
結論
使用 127 的偏移值,只是因為需要使用 -127 - 128 的值范圍,此時浮點數的表示范圍更為均衡而已。
注:這也只是對標准的一種猜測,但不失為一個合理的猜測。
后記
移碼關鍵在於保持原來的大小關系,因此對於一個特定的范圍,必須要將最小值映射成 0。