浮點數的表示

在定點數表示中存在的一個問題是,難以表示數值很大的數據和數值很小的數據。例如,電子的質量(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所示。

215.gif

其中,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所示:

216.gif

單精度格式(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位)浮點數的表示方法。

當一個浮點數的尾數爲 0,不論其階碼爲何值,或者當階碼的值遇到比它所能表示的最小值還小時,不管其尾數爲何值,計算機都把該浮點數看成零值,稱爲機器零。

當階碼E爲全0且尾數M也爲全0時,表示的真值X爲零,結合符號位S爲0或1,有正零和負零之分。當階碼E爲全1且尾數M也爲全0時,表示的真值X爲無窮大(∞),結合符號位S爲0或1,有+∞和-∞之分。這樣,在32位浮點數表示中,要除去E用全0和全1(255)表示零和無窮大的特殊情況,因此,階碼E的取值範圍變爲1~254,指數的偏移量不選128(10000000B),而選127(01111111B)。對於32位規格化浮點數,真正的指數值e爲-126~+127,因此,數的絕對值的範圍是2-126~2127≈10-38~1038


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

發佈了17 篇原創文章 · 獲贊 31 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章