浮點數在電腦記憶體的儲存結構以及溢出臨界值的計算

來源:互聯網
上載者:User

標籤:

轉載參考:http://share.onlinesjtu.com/mod/tab/view.php?id=176

              http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html

              http://baike.baidu.com/link?url=heUWO1s1ygzWlf_ZQ0nzfKcJQFmosbGJVzkOCvInmNRcISY_bSfsjaDaxgGjOlJcMwFKKIMf3z9Ml0hW6xQi7_ 

在定點數表示中存在的一個問題是,難以表示數值很大的資料和數值很小的資料。例如,電子的品質(9×10-28克)和太陽的品質(2×1033克)相差甚遠,在定點電腦中無法直接表示,因為小數點只能固定在某一個位置上,從而限制了資料的表示範圍。

為了表示更大範圍的資料,數學上通常採用科學計數法,把資料表示成一個小數乘以一個以10為底的指數。

例如,在電腦中,電子的品質和太陽的品質可以分別取不同的比例因素,以使其數值部分的絕對值小於1,即:

9×10-28 = 0.9×10-27

2×1033 = 0.2×1034

這裡的比例因素10-27和1034要分別存放在機器的某個單元中,以便以後對計算結果按此比例增大。顯然,這要佔用一定的儲存空間和運算時間。

浮點標記法就是把一個數的有效數字和數的範圍在電腦中分別予以表示。這種把數的範圍和精度分別表示的方法,相當於數的小數點位置隨比例因素的不同而在一定範圍內自由浮動,改變指數部分的數值相當於改變小數點的位置。在這種標記法中,小數點的位置是可以浮動的,因此稱為浮點標記法。

浮點數的一般表示形式為:

一個十進位數N可以寫成:N = 10e×M

一個位元N可以寫成:N = 2e×M

其中,M稱為浮點數的尾數,是一個純小數;e是比例因素的指數,稱為浮點數的指數,是一個整數。在電腦中表示一個浮點數時,一是要給出尾數M,用小數形式表示;二是要給出指數e,用整數形式表示,常稱為階碼。尾數部分給出有效數位位元,因而決定了浮點數的表示精度;階碼部分指明了小數點在資料中的位置,因而決定了浮點數的表示範圍。浮點數也是有符號數,帶符號的浮點數的表示2-2所示。

其中,S為尾數的符號位,放在最高一位;E為階碼,緊跟在符號位之後,佔m位;M為尾數,放在低位部分,佔n位。

1. 規格化浮點數

若不對浮點數的表示做出明確規定,同一個浮點數的表示就不是惟一的。例如:

 (1.75)10 = (1.11)2        = 1.11×20

                                      = 0.111×21

                                      = 0.0111×22

                                      = 0.00111×23

為了提高資料的表示精度,需要充分利用尾數的有效位元。當尾數的值不為0時,尾數域的最高有效位應為1,否則就要用修改階碼同時左右移動小數點的辦法,使其變成符合這一要求的表示形式,這稱為浮點數的規格化。

2. IEEE-754標準浮點格式

在IEEE-754標準出現之前,業界並沒有一個統一的浮點數標準,相反,很多電腦製造商都在設計自己的浮點數規則以及運算細節。

為了便於軟體的移植,浮點數的表示格式應該有一個統一的標準。1985年,IEEE(Institute of Electrical and Electronics Engineers,美國電氣和電子工程師協會)提出了IEEE-754標準,並以此作為浮點數表示格式的統一標準。目前,幾乎所有的電腦都支援該標準,從而大大改善了科學應用程式的可移植性。

IEEE標準從邏輯上採用一個三元組{S, E, M}來表示一個數N,它規定基數為2,符號位S用0和1分別表示正和負,尾數M用原碼錶示,階碼E用移碼錶示。根據浮點數的規格化方法,尾數域的最高有效位總是1,由此,該標準約定這一位不予儲存,而是認為隱藏在小數點的左邊,因此,尾數域所表示的值是1.M(實際儲存的是M),這樣可使尾數的表示範圍比實際儲存多一位。為了表示指數的正負,階碼E通常採用移碼方式來表示,將資料的指數e 加上一個固定的位移量後作為該數的階碼,這樣做既可避免出現正負指數,又可保持資料的原有大小順序,便於進行比較操作。

目前,大多數進階語言都按照IEEE-754標準來規定浮點數的儲存格式。IEEE-754標準規定,單精確度浮點數用4位元組(即32位)儲存,雙精確度浮點數用8位元組(即64位)儲存,2-3所示:

單精確度格式(32位):符號位(S)1位;階碼(E)8位,階碼的位移量為127(7FH);尾數(M)23位,用小數表示,小數點放在尾數域的最前面;

雙精確度格式(64位):符號位(S)1位;階碼(E)11位,階碼的位移量為1023(3FFH);尾數(M)52位,用小數表示,小數點放在尾數域的最前面。

在IEEE-754標準中,一個規格化的32位浮點數X的真值可表示為:

X = (-1)s×(1.M)×2 E-127       e = E-127          (式2-9)

在IEEE-754標準中,一個規格化的64位浮點數X的真值可表示為:

X = (-1)s×(1.M)×2 E-1023       e = E-1023         (式2-10)

由於雙精確度格式的原理與單精確度格式相同,僅僅是表示的位元有所增加,所以,下面主要介紹單精確度格式(32位)浮點數的表示方法。

電腦中機器零是指:1、如果一個浮點數的尾數全為0,則不論其階碼為何值,電腦在處理時都把這種浮點數當作零看待;2、如果一個浮點數的階碼小於它所表示範圍的最小值,則不論其尾數為何值,電腦在處理時都把這種浮點數當作零看待。

當階碼E為全0時,若尾數M也為全0時,表示的真值X為零,結合符號位S為0或1,有正零和負零之分。若M非全0,這時,浮點數的指數E等於1-127(或者1-1023),有效數字M不再加上第一位的1,而是還原為0.xxxxxx的小數。總之,這樣做是為了表示±0,以及接近於0的很小的數字。

當階碼E為全1時,若尾數M也為全0時,表示的真值X為無窮大(∞),結合符號位S為0或1,有+∞和-∞之分。如果有效數字M不全為0,表示這個數不是一個數(NaN)。

當E不全為0,不全為1。這時,浮點數就採用上面的規則表示,即指數E的計算值減去127(或1023),得到真實值,再將有效數字M前加上第一位的1。

這樣,在32位浮點數表示中,要除去E用全0和全1(255)表示零和無窮大的特殊情況,因此,階碼E的取值範圍變為1~254,指數的位移量不選128(10000000B),而選127(01111111B)。對於32位規格化浮點數,真正的指數值e為-126~+127,因此,數的絕對值的範圍是2-126~2127≈10-38~1038。

補充說明:

在單精確度表示中,以8位二進位儲存指數(階碼)。原本的範圍是-127~128(餘碼系統)。餘127碼後,加上位移量,範圍變成0~255。由之前的討論,去除全0和全1的階碼,階碼E的取值範圍變為1~254即真正的指數值e為-126~ +127。

由此我們計算單精確度浮點標記法可以表示的數的最大絕對值:1.11………1(23個1)最大尾數,再化為十進位,再乘以2^127 (階碼可以表示的最大指數),結果=(1-2^-24)*2^128

                                                                                                                                                                                                              = 3.4028234663853 * 10 38

            計算單精確度浮點標記法可以表示的數的最小絕對值 :(1-2^-1)*2^-127 =2.9387358770557 * 10 -39(這個值我暫時不會計算,求教)

 

            超出最大絕對值的數為上溢,小於最大絕對值的數為下溢。 

浮點數在電腦記憶體的儲存結構以及溢出臨界值的計算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.