1. 程式人生 > >浮點數是如何表示的

浮點數是如何表示的

如何編碼浮點數?我們知道計算機表示的任何資訊都是一串bit,具體內容決定於如何解釋。IEEE浮點標準用

V = (-1)^s * M * 2^E

的形式來表示一個數。s表示符號(1表示負,0表示正); M表示尾數,二進位制小數,取值範圍為1~2或者0~1,不包括上限值;E表示階碼,對浮點數加權,這個權重是2的E次冪(可能是負數)。在單精度浮點格式中,s佔用最高位1位,exp佔用接下來的8位,frac佔用剩下的23位。雙精度中分別是(1,11,52)。
請注意前面為何不直接說E佔用了多少位和M佔用了多少位?因為最終E和M的值需要由exp和frac的位模式計算出來。接下來討論單精度浮點數,exp的8個bit位取值有三種情況,下面根據每種情況分別計算E和M。

首先約定exp的值為8個bit組成的無符號數,取值為0~255。E為有符號數,取值為-126~127
frac應該解釋為二進位制小數,計算方式是從高位到低位的每個bit乘以2的負數冪(-1到-23),然後相加。

當exp大於0小於255時,浮點數為規格化。

E = exp - (2^7 - 1)

M = 1 + frac

當exp等於0時,浮點數為非規格化。

E = 1 - (2^7 - 1)

M = frac

非規則化可以表示0,即frac取值為0時。根據符號位分別是+0.0或者-0.0

當exp等於255時,浮點數解釋為特殊值。

當frac取值0時,根據符號位分別表示+∞和-∞,無窮能表示溢位;當frac不為0時,表示NaN,當一些運算的結果不能是實數或者無窮時就會返回這個,例如計算-1開根號。