IEEE浮點數標准


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位

三個字段的編碼:

  1. 單獨的s直接編碼符號s

  2. k位的階碼字段:

    \[exp=e_{k-1}e_{k-2}\cdots e_{1}e_{0} \]

編碼E

  1. 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. 無窮大

階碼全為1且小數字段全為0,根據符號位表示±∞

  1. NaN

階碼全為1且小數字段不全為0,這不是一個數(Not a Number)

總結

值的表示:

\[V=(-1)^s\times M\times2^E \]

單精度:

  1. 規范值:

    E=exp-bias

    bias=127

    M=1+f

  2. 非規范:

    E=1-bias=-126

    bias=127

    M=f

雙精度:

  1. 規范值:

    E=exp-bias

    bias=1023

    M=1+f

  2. 非規范值

    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 \]

可以寫出如下表格:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM