【計算機基礎】詳解IEEE754浮點數規格化表示(小數點左邊隱含一位1)

原文鏈接:https://blog.csdn.net/AaricYang/article/details/91358149

1、IEEE浮點表示


IEEE(讀作“eye-triple-ee”)浮點標準754中,用圖1的形式來表示一個數:

浮點數表示形式
圖1 浮點數表示形式​​​


符號(sign)——s決定這個數是負數(s=1)還是正數(s=0),而對於數值0的符號位解釋,作爲特殊情況處理;

尾數(significand)——M決定浮點數的精度,它是一個二進制小數;

階碼(exponent)——E的作用是對浮點數加權,這個權重是2的E次冪(可能是負數),它決定浮點數的取值範圍。

對於單精度 / 雙精度 / 擴展精度,組成形式是:1 / 1 / 1位符號,8 / 11 / 15位階碼,23 / 52 / 64位尾數。

2、浮點數值的分類 


根據階碼,浮點數可以分成三種情況:規格化的非規格化的特殊值 

 情況1:規格化的值


 當階碼的所有bits,既不全爲0,也不全爲1時,都屬於這種情況。

此時,階碼字段被解釋爲"以偏置(Bias)形式表示的有符號整數" 。也就是說,階碼所表示的實際數值應是 

其中 e 是k 位的階碼所表示的無符號數值,其位表示形式爲:"  "。 

而Bias是一個等於的偏置值,例如單精度float的偏置是127。由此產生指數的取值範圍,對於單精度float是 -126~127 (針對階碼數值爲-127或128時的分析,請參考情況2和情況3)

 

而尾數字段,則被定義爲  

其中,f 是n 位的尾數所表示的小數值,滿足 ,其二進制表示爲:"   ",也就是二進制小數點在最高有效位的左邊。

有時,這種方式也叫做隱含的以1開頭的表示 ,因爲我們可以把尾數 M 看成是一個二進制表達式爲:"  " 的數字。

爲什麼要用這種表示方式?因爲既然我們總能夠調整階碼 E ,使得尾數 M 在範圍  之中,那麼這種表示方法是一種輕鬆獲得一個額外精度位的技巧——既然第一位總是等於1,那我們就不需要顯式地表示它

由此,規格化形式可以表示的數值 V 的範圍是  。

 
情況2:非規格化的值


 當階碼的所有bits全爲0時,所表示的數是非規格化形式。(針對單精度float,階碼值爲-127)

在這種情況下,階碼的數值是  。而尾數的值是  ,也就是尾數字段的值,開頭沒有隱含的1。

——那麼,爲什麼非規格化形式爲什麼將階碼值定義爲 ,而不是  ?

——因爲只有這樣,才能從非規格化值平滑轉換到規格化值。(對此,本文章最後以數字示例做了詳細解釋。)

 非規格化形式提供了兩種數值0的表示,以單精度float爲例,分別是:

+0:0    0000 0000    000 0000 0000 0000 0000 0000;

-0: 1    0000 0000    000 0000 0000 0000 0000 0000。

由此,非規格化形式可以表示的數值 V 的範圍是分段函數  ,其中,s 爲符號位。

 

情況3:特殊值


 當階碼的所有bits全爲1時,所表示的數是特殊值。(針對單精度float,階碼值爲128)

(1)無窮 ∞

尾數爲0時,該值表示無窮。當兩個非常大的數相乘時,或除數爲0時,無窮能夠表示溢出的結果。

+∞ :0    1111 1111    000 0000 0000 0000 0000 0000

-∞  :1    1111 1111    000 0000 0000 0000 0000 0000

(2)NaN

尾數不爲0時,結果值被稱爲“NaN (Not a Number)”,一些運算的結果不爲實數或無窮時,就會返回這樣的 NaN 值,比如計算  或  時。

NaN  :x    1111 1111    xxx xxxx xxxx xxxx xxxx xxxx

3、數字示例 
圖2展示了假定的8位浮點格式的示例,其中有 k = 4 的階碼位和 n = 3 的小數位。於是可知偏置量 Bias 是  。

圖2 8位浮點格式的非負值示例



可以觀察到,最大非規格化數  和最小規格化數  之間的平滑轉變。這種平滑性歸功於我們對非規格化數的階碼 E 的數值的定義。通過將非規格化數的階碼 E 定義爲 1 - Bias,而不是 -Bias,我們可以補償非規格化數的尾數沒有隱含的1。

本文完。

 

摯謝閱讀!

 

原文鏈接:https://blog.csdn.net/AaricYang/article/details/91358149

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章