首頁 > web前端 > js教程 > 主體

浮點數的表示範圍

清浅
發布: 2019-03-08 17:00:22
原創
37683 人瀏覽過

浮點數是由符號,階碼和尾數三部分組成,浮點數分為單精度浮點數和雙精度浮點數,單精度浮點數的便是範圍是-3.4E38 ~3.4E38,雙精確度浮點數的範圍是-1.79E 308 ~ 1.79E 308

浮點數的表示範圍

##【建議課程:JavaScriptScript教學

浮點數表示

一個浮點數(Floating Point Number)由三個基本成分構成:符號(Sign)、階碼(Exponent)和尾數(Mantissa)。通常可以用下面的格式來表示浮點數:


S PM    

其中S是符號位,P是階碼,M是尾數。

根據IEEE(美國電氣和電子工程師學會)754標準中的定義,單精度浮點數是32位元(即4位元組)的,雙精確度浮點數是64位元(即8位元組)的。兩者的S、P、M所佔的位數以及表示方法都由下表可知:#偏移  127    #1023    

S    M   表示公式
單精確度浮點數 1 (第31位) 8(30到23位) 23(22到0位) (-1)^S*2(P-127) *1.M
#雙精確度浮點數 1(第63位) 11(62到52位元) 52(51到0位元) (-1)^S*2(P-1023)*1.M
#######

其中S是符號位,只有0和1,分別表示正負

P是階碼,通常使用移碼表示(移碼和補碼只有符號位相反,其餘都一樣。對於正數而言,原碼、反碼和補碼都一樣;對於負數而言,補碼就是其絕對值的原碼全部取反,然後加1)。階碼可以為正數,也可以為負數,為了處理負指數的情況,實際的指數值按要求需要加上一個偏差(Bias)值作為保存在指數域中的值,單精度數的偏差值為127,雙精度數的偏差值為1023。例如,單精度的實際指數值0在指數域中將保存為127,而保存在指數域中的64則表示實際的指數值-63,偏差的引入使得對於單精度數,實際可以表達的指數值的範圍就變成-127到128之間(包含兩端)。

M為尾數,其中單精度數為23位長,雙精度數為52位長。 IEEE標準要求浮點數必須是規範的。這意味著尾數的小數點左側必須為1,因此在保存尾數的時候,可以省略小數點前面這個1,從而騰出一個二進位來保存更多的尾數。這樣實際上用23位長的尾數域表達了24位的尾數。例如對於單精度數而言,二進制的1001.101(對應於十進制的9.625)可以表達為1.001101 × 23,所以實際保存在尾數域中的值為001101000000000000000000,即去掉小數點在右側的1補齊。
根據標準要求,無法精確保存的值必須向最接近的可保存的值進行舍入,即不到一半則舍,一半以上(包括一半)則進。不過對於二進制浮點數而言,還多一條規矩,就是當需要捨入的值剛好是一半時,不是簡單地進,而是在前後兩個等距接近的可保存的值中,取其中最後一位有效數字為零者。

據上述分析,IEEE 754標準中定義浮點數的表示範圍為:


二進位(Binary) 十進位(Decimal)
#單精確度浮點數 ± (2-2^-23) × 2127 ~ ± 10^38.53
雙精確度浮點數 ± (2-2^-52) × 21023 #~ ± 10^ 308.25

浮點數的表示有一定的範圍,超出範圍時會產生溢位(Flow),一般稱大於絕對值最大的資料為上溢(Overflow),小於絕對值最小的資料為下溢(Underflow)。

浮點數的表示約定

  單精度浮點數和雙精度浮點數都是用IEEE 754標準定義的,其中有一些特殊約定,例如:
  1、當P=0,M=0時,表示0。
  2、當P=255,M=0時,表示無窮大,用符號位來決定是正無窮大還是負無窮大。
  3、當P=255,M≠0時,表示NaN(Not a Number,不是一個數)。
非規範浮點數

當兩個絕對​​值極小的浮點數相減後,其差值的指數可能超出允許範圍,最終只能近似為0。為了解決此類問題,IEEE標準中引入了非規範(Denormalized)浮點數,規定當浮點數的指數為允許的最小指數值時,尾數不必是規範化(Normalized)的。有了非規範浮點數,去掉了隱含的尾數位的限制,可以保存絕對值較小的浮點數。而且,由於不再受到隱含尾數域的限制,上述關於極小差值的問題也不存在了,因為所有可以保存的浮點數之間的差值同樣可以保存。
根據IEEE 754標準中的定義,規範和非規範浮點數的表示範圍可歸納為下表:

##規範浮點數非規範浮點數十進位近似範圍單精確度浮點數± 2^-149 至(1-2^-23)*2^-126± 2^-126 至(2-2^-23)*2^127± ~10^-44.85 至~10^38.53雙精度浮點數#± 2^-1074 至(1-2^-52)*2^-1022± 2^-1022 至(2-2^-52)*2^1023#± ~10^-323.3 至~10^308.3

############ ####與IEEE 754相關的標準#########本文的結論是基於IEEE 754標準,另外一個標準是IEEE 854,這個標準是關於十進制浮點數的,但沒有規定具體格式,所以很少被採用。另外,從2000年開始,IEEE 754開始修訂,稱為IEEE 754R,目的是融合IEEE 754和IEEE 854標準。該標準在浮點格式方面的修訂有:1、加入了16位和128位的二進制浮點數格式;2、加入了十進制浮點數格式,採用了IBM公司提出的格式。 ######總結:以上就是這篇文章的全部內容了,希望對大家有幫助。 ###### ###

以上是浮點數的表示範圍的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板