IEEE浮點數標准
閱讀筆記:Computer System : A Programmmer's Perspective
基本概念
IEEE浮點數標准采用
的形式表示一個數:
-
符號:s決定數的正負
-
尾數:M是一個二進制小數,范圍是1~2-epsilon 或者 0~1-epsilon
-
階碼:E的作用是對浮點數加權,權重為2的E次冪
下圖為單精度(32位)與雙精度(64位)的位示意圖:
單精度:
- s:1位
- exp:k=8位
- frac:n=23位
雙精度:
- s:1位
- exp:k=11位
- frac:n=52位
三個字段的編碼:
-
單獨的s直接編碼符號s
-
k位的階碼字段:
\[exp=e_{k-1}e_{k-2}\cdots e_{1}e_{0} \]
編碼E
- n位的小數字段:
\[frac=f_{n-1}f_{n-1}\cdots f_{1}f_{0} \]
編碼M
編碼的三種情況
規范化值
當exp的位即不全為0也不全為1時(即單精度范圍:1~254 雙精度范圍:1~2046),即為規范化的值。這種情況下,階碼字段可以被解釋為以偏置量(bias)形式表示的有符號整數
其中:exp即為階碼字段表示的值,並有
故對於單精度bias=127,雙精度bias=1023,由此可得:
或者是:
因此指數的范圍:
或者是:
小數字段被解釋為描述小數值f,0≤f<1,即:
尾數定義為:
非規范化值
當階碼域全為0時,表示的數是非規范化的,此時的階碼為
故E=-126(單精度)或者E=-1022(雙精度)而尾數:
同理0≤f<1,即:
用途:
- 表示數值0
- 表示非常接近0的數
特殊值
- 無窮大
階碼全為1且小數字段全為0,根據符號位表示±∞
- NaN
階碼全為1且小數字段不全為0,這不是一個數(Not a Number)
總結
值的表示:
單精度:
-
規范值:
E=exp-bias
bias=127
M=1+f
-
非規范:
E=1-bias=-126
bias=127
M=f
雙精度:
-
規范值:
E=exp-bias
bias=1023
M=1+f
-
非規范值
E=1-bias=-1022
bias=1023
M=f
示例
Q1.將-3.33333333轉換為單精度表示
首先,將這個小數轉化為二進制的小數形式(利用×2法)
規范化:
因此:
從而可以寫出單精度表示
Q2.給出如圖8位二進制數在IEEE標准的浮點格式
首先對於規范化值:
對於非規范值:
可以寫出如下表格: