IEEE浮點數標準
閱讀筆記:Computer System : A Programmmer's Perspective
基本概念
IEEE浮點數標準采用
\[V=(-1)^s\times M\times2^E \]的形式表示一個數:
-
符號: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)形式表示的有符號整數
\[E=exp-bias \]其中:exp即為階碼欄位表示的值,并有
\[bias=2^{k-1}-1 \]故對于單精度bias=127,雙精度bias=1023,由此可得:
\[E=exp-127 \]或者是:
\[E=exp-1023 \]因此指數的范圍:
\[E\in [-126,127] \]或者是:
\[E\in [-1022,1023] \]小數欄位被解釋為描述小數值f,0≤f<1,即:
\[f=\sum_{i=0}^{n-1}f_i*2^{i-n} \]尾數定義為:
\[M=1+f \]非規范化值

當階碼域全為0時,表示的數是非規范化的,此時的階碼為
\[E=1-bias \]故E=-126(單精度)或者E=-1022(雙精度)而尾數:
\[M=f \]同理0≤f<1,即:
\[f=\sum_{i=0}^{n-1}f_i*2^{i-n} \]用途:
- 表示數值0
- 表示非常接近0的數
特殊值
- 無窮大

階碼全為1且小數欄位全為0,根據符號位表示±∞
- NaN

階碼全為1且小數欄位不全為0,這不是一個數(Not a Number)
總結
值的表示:
\[V=(-1)^s\times M\times2^E \]單精度:
-
規范值:
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法)
\[-3.33333333_{10}=-11.010101010101..._{2} \]規范化:
\[-3.33333333_{10}=-1.1010101010101..._{2}\times2^1 \]因此:
\[s=1 \]\[exp=E+bias=1+127=128_{10}=1000 0000_{2} \]\[M=1.1010101010..._2\Rightarrow f=1010101010..._2 \]從而可以寫出單精度表示
\[11000000010101010101010101010101_2=C0555555_{16} \]Q2.給出如圖8位二進制數在IEEE標準的浮點格式

首先對于規范化值:
\[E=exp-bias=exp-7 \]對于非規范值:
\[E=1-bias=-6 \]可以寫出如下表格:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/165382.html
標籤:其他
