數的定點表示和浮點表示【轉帖】

計算機處理的數值數據多數帶有小數,小數點在計算機中一般有兩種表示方法,一種是約定全部數值數據的小數點隱含在某一個固定位置上,稱爲定點表示法,簡稱定點數;另外一種是小數點位置能夠浮動,稱爲浮點表示法,簡稱浮點數大數據

1. 定點數表示法(fixed-point) spa

所謂定點格式,即約定機器中全部數據的小數點位置是固定不變的。在計算機中一般採用兩種簡單的約定:將小數點的位置固定在數據的最高位以前,或者是固定在最低位以後。通常常稱前者爲定點小數,後者爲定點整數。 二進制

定點小數是純小數,約定的小數點位置在符號位以後、有效數值部分最高位以前。若數據 x 的形式爲 x = x0.x1x2xn ( 其中x0符號位x1xn是數值的有效部分,也稱爲尾數, x1爲最高有效位 ),則在計算機中的表示形式爲: float

通常說來,若是最末位 xn = 1,前面各位都爲 0 ,則數的絕對值最小,即 |x|min = 2-n 。若是各位均爲 1,則數的絕對值最大,即 |x|max =1-2-n 。因此定點小數的表示範圍是: 方法

2n   | x | ≤ 1 -  2n im

定點整數是純整數,約定的小數點位置在有效數值部分最低位以後。若數據 x 的形式爲 x x0 x1x2xn ( 其中x0爲符號位,x1xn 是尾數, xn 爲最低有效位 ),則在計算機中的表示形式爲: 數據

    

定點整數的表示範圍是: img

1 | x |  2n  -  1 計算機

當數據小於定點數能表示的最小值時,計算機將它們做0處理,稱爲下溢;大於定點數能表示的最大值時,計算機將沒法表示,稱爲上溢,上溢和下溢統稱爲溢出poi

計算機採用定點數表示時,對於既有整數又有小數的原始數據,須要設定一個比例因子,數據按其縮小成定點小數或擴大成定點整數再參加運算,運算結果,根據比例因子,還原成實際數值。若比例因子選擇不當,每每會使運算結果產生溢出或下降數據的有效精度。

用定點數進行運算處理的計算機被稱爲定點機        

2. 浮點數表示法(floating-point number)

與科學計數法類似,任意一個J進制數N,總能夠寫成

N = J E × M

式中M稱爲數 尾數(mantissa),是一個純小數;E 爲數 N 的階碼(exponent),是一個整數,J稱爲比例因子 底數。這種表示方法至關於數的小數點位置隨比例因子的不一樣而在必定範圍內能夠自由浮動,因此稱爲浮點表示法。

底數是事先約定好的(常取2),在計算機中不出現。在機器中表示一個浮點數時,一是要給出尾數,用定點小數形式表示。尾數部分給出有效數字的位數,於是決定了浮點數的表示精度。二是要給出階碼,用整數形式表示,階碼指明小數點在數據中的位置,於是決定了浮點數的表示範圍。浮點數也要有符號位。所以一個機器浮點數應當由階碼和尾數及其符號位組成:

其中 E表示階碼的符號,佔一位,E1~En 爲階碼值,佔 n 位,尾符是數 N 的符號,也要佔一位。當底數取 2 時,二進制數 N 的小數點每右移一位,階碼減少 1,相應尾數右移一位;反之,小數點每左移一位,階碼加 1,相應尾數左移一位。

若不對浮點數的表示做出明確規定,同一個浮點數的表示就不是惟一的。例如 11.01 也能夠表示成 0.011012-3 ,0.1101×2-2 等等。爲了提升數據的表示精度,當尾數的值不爲 0 時,其絕對值應大於等於 0.5,即尾數域的最高有效位應爲 1,不然要以修改階碼同時左右移小數點的方法,使其變成這一要求的表示形式,這稱爲浮點數的規格化表示。

當一個浮點數的尾數爲 0 時,不論其階碼爲什麼值,或者當階碼的值遇到比它能表示的最小值還小時,無論其尾數爲什麼值,計算機都把該浮點數當作 0 值,稱爲機器零

浮點數所表示的範圍比定點數大。假設機器中的數由 8 位二進制數表示(包括符號位):在定點機中這 8 位所有用來表示有效數字(包括符號);在浮點機中若階符、階碼佔 3 位,尾符、尾數佔 5 位,在此狀況下,若只考慮正數值,定點機小數表示的數的範圍是 0.0000000 到 0.1111111,至關於十進制數的 0 到 127/128,而浮點機所能表示的數的範圍則是 2 - 11×0.0001 到 211×0.1111,至關於十進制數的 1/128 到 7.5 。顯然,都用 8 位,浮點機能表示的數的範圍比定點機大得多。

儘管浮點表示能擴大數據的表示範圍,但浮點機在運算過程當中,仍會出現溢出現象。下面以階碼佔 3 位,尾數佔 (各包括 1 位符號位)爲例,來討論這個問題。圖 2-1 給出了相應的規格化浮點數的數值表示範圍。

圖2-1  規格化浮點數分佈示意圖

圖 2-1 中,「可表示的負數區域」和「可表示的正數區域」及「0」,是機器可表示的數據區域;上溢區是數據絕對值太大,機器沒法表示的區域;下溢區是數據絕對值過小,機器沒法表示的區域。若運算結果落在上溢區,就產生了溢出錯誤,使得結果不能被正確表示,要中止機器運行,進行溢出處理。若運算結果落在下溢區,也不能正確表示之,機器當 0 處理,稱爲機器零。

通常來講,增長尾數的位數,將增長可表示區域數據點的密度,從而提升了數據的精度;增長階碼的位數,能增大可表示的數據區域。

相關文章
相關標籤/搜索