1、什麼是IEEE754標準
用來規範化浮點數,其格式是
(1)32位
x=(-1)s×(1.M)×2E-127 e=E-127
(2)64位
x=(-1)s×(1.M)×2E-1023 e=E-1023
其中,s是符號位,M是尾數,E是階碼,e是實際的指數值
表 三種形式的IEEE754浮點數格式
參數 | 單精度浮點數 | 雙精度浮點數 | 擴充精度浮點數 |
浮點數字長 | 32 | 64 | 80 |
尾數長度P | 23 | 52 | 64 |
符號位S | 1 | 1 | 1 |
指數長度E | 8 | 11 | 15 |
最大指數 | +127 | +1023 | +16383 |
最小指數 | -126 | -1022 | -16382 |
指數偏移量 | +127 | +1023 | +16383 |
可表示的實數範圍 | 10-38~1038 | 10-308~10308 | 10-4932~104932 |
浮點數表示格式如下:
數符號S | 階符Es | 階碼E | 尾數M |
2、爲什麼階碼的偏移量是127?
先看下什麼機器零:
(1)當浮點數尾數M=0,無論階碼E爲何值,則該浮點數爲0值
(2)當階碼的值遇到比它所能表示的最小值還小時,不管尾數M爲何值,則浮點數爲0值
(1)、(2)中的零值稱爲機器零
以32位浮點數爲例:
"當階碼E 爲全0且尾數M 也爲全0時,表示的真值x 爲零,結合符號位S 爲0或1,有正零和負零之分。當階碼E 爲全1且尾數M 爲全0時,表示的真值x 爲無窮大,結合符號位S 爲0或1,也有+∞和-∞之分。這樣在32位浮點數表示中,要除去E 用全0和全1(255)10表示零和無窮大的特殊情況,指數的偏移值不選128(10000000),而選127(01111111)。對於規格化浮點數,E 的範圍變爲1到254,真正的指數值e 則爲-126到+127。因此32位浮點數表示的絕對值的範圍是10-38~1038(以10的冪表示)。"——引自 白中英<<計算機組成原理>>
S(1位) E(8位) M(23位) N(32位)
符 0 0 (-1)S *2E-127·(1.M) 爲規格化數
0 不等於0 (-1)S*2-126*(0.M) 爲非規格化數
號 1到254之間 不等於0 (-1)S*2E-127*(1.M) 爲規格化數
255 不等於0 NaN(非數值)
位 255 0 無窮大
其中紅色字0、1表示隱含位,注意當數字N爲非規格化數或是0時,隱含位是0。
如果選擇偏移值128時,假設指數(不是階碼)爲+127,按照e=E-128,則階碼爲127+128=255,全爲1 ,由上表可知N爲NaN和無窮大
假設指數爲0(包括正0和負0),按e=E-128,則正0+128=128,負0(補碼)+128=0,由上可知E=0時,存在非規格化數
由於8位E中,只有7位有效數字,7位能表示的大小爲0-127,所以偏移量可以在0-127中任取一值,在IEEE754Z中規定取127.
3、爲什麼階碼錶示的最小指數是-126呢?
有2中描述可以得到,當偏移量爲127時,若最小指數是-127,按e=E-127,則127+(-127)=0,E=0,存在非規格化數
故取-126,這也符合E的表示範圍1~254。