(數據類型-Number的浮點型)JavaScript權威指南筆記4.1

數字(number)的描述

javascript不區別整型數值和浮點型數值。
javascript採用IEEE 754標準定義的64位浮點格式表示數字。
數字表示最大值是:2^1024約等於1.7976931348623157*10^308
最小值是:2^(-52)*2^(-1022)約等於5*10^(-324)。
本節給的最大值和最小值是一個大約值。
這個範圍是怎麼得來的呢?以下做個簡單說明。

IEEE 754標準定義的64位浮點存儲格式

目的
瞭解浮點數存儲結構和浮點數的表示範圍是爲了避免編寫代碼時,計算結果溢出造成內存泄漏。

計算機中:
(+0)=0.000…
(- 0)=1.000…

這裏寫圖片描述

s:佔1位,浮點數的符號位。
E:佔11位,浮點數的指數或稱爲價碼。
h:不佔位,隱藏位。值是1或0。
f :佔52位,小數位。
s(1)+E(11)+h(0)+f(52)=64位

下圖爲ieee754文檔內容,其中53表示有1位s和52位f
這裏寫圖片描述

64位浮點數二進制公式

V=(-1)^s*M*R^e=(-1)^s*1.f*R^e
R爲基數,這裏的表達式是二進制,值爲2。
M=h+0.f,即 M=1+0.f 或 M=0.0+0.f。M爲1時稱爲規範化格式,M值爲0時稱爲非規範化格式。

V結果可表示:無窮大,無窮小,NaN,sNaN,0.f*2^emin,1.f*2^e,0。
ieee754文檔的截圖:
這裏寫圖片描述
另一個文檔描述的圖比較直觀,見下圖(出處點擊這裏):
這裏寫圖片描述

當emin < e < emax時,V的值爲1.f*2^e,爲浮點型規範化表示,隱藏位h的值爲1。
當e=emin-1和f爲非0值時,爲浮點型非規範化表示,隱藏位的值爲0。
NaN表示不是一個數。

關於E值的說明

E值用移碼來存儲,所以真值e需要加一個修正值纔等於E值,64位浮點數的修正值是1023,即E=e+1023。計算機中用補碼來將負數和值一起編碼,所以11位的1023是[-1023]補=111 1111 1111=100 0000 0001。

E佔用11位,爲無符號值,所以E值表示的範圍是0到2^11-1,即0到2047。真值e最大值=E最大值-1023=1024。真值e的最小值=E最小值-1023=-1023。真值e的表示範圍是 -1023到1024。

E值爲全1和全0時有特殊用途。用來結合f值表示浮點數結果的其他情況(見前面的表格圖:TABLE D-2 IEEE 754 Special Values)。

E值最大值,即爲全1時,E值=2047,真值e=1024。
e=E-1023=2047-1023=111 1111 1111[移] + 100 0000 0001[補] =1100 0000 0000,進位1超過11位,丟棄,11位的值爲“100 0000 0000”。“100 0000 0000”表示的正數時真值爲1024,表示負數時爲-2048。因爲E-1023>0,結果爲正數,所以e值爲1024而不是-2048。

E值最小值,即爲全0時,E值=0,真值e=-1023。
e=E-1023=0-1023=000 0000 0000 + 100 0000 0001 = 100 0000 0001,11位的值爲“100 0000 0000”。“100 0000 0001”表示的正數時真值爲1025,表示負數時爲-1023。因爲E-1023<0,結果爲負數,所以e值爲-1023,而不是1025。

真值e的表示範圍是emin到emax(注意emin和emax是真值),見下圖:
這裏寫圖片描述

e最小值=-1023=emin-1=-1022-1,即emin=-1022。
e最大值=1024=emax+1=1023+1,即emax=1023。

浮點數規範化格式真值e的範圍是:-1022 < e < 1023。
浮點數非規範化格式需要算上f能表示的範圍,即2^(-52)。

浮點數非規範化格式真值e最小值是:2^(-52)*2^(-1022)
約等於5*10^(-324)。

浮點數非規範化格式真值e最大值是:2^1024,
約等於1.7976931348623157*10^308 。

ieee754文檔64位表示範圍截圖如下:
這裏寫圖片描述

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