浮點數的表示

定點數雖然能夠表示整數和小數,但其表示範圍和精度都受到很大限制。當需要表示非常大或非常小的數值時,定點數就顯得力不從心。浮點數採用科學計數法的思想,將數值表示為尾數和指數兩部分,能夠在有限的位數內表示更大的數值範圍,是計算機中表示實數的主要方式。

1. 浮點數的基本概念

浮點數的表示形式借鑑了科學計數法的思想。在十進制科學計數法中,一個數可以表示為計算機組成原理——浮點數的表示_#排序算法的形式,其中計算機組成原理——浮點數的表示_單精度_02稱為尾數,計算機組成原理——浮點數的表示_字段_03是基數(通常為10),計算機組成原理——浮點數的表示_字段_04稱為指數。例如,計算機組成原理——浮點數的表示_浮點數_05可以表示為計算機組成原理——浮點數的表示_字段_06計算機組成原理——浮點數的表示_#排序算法_07可以表示為計算機組成原理——浮點數的表示_浮點數_08

在計算機中,浮點數採用二進制形式表示,基數計算機組成原理——浮點數的表示_浮點數_09。一個浮點數由三部分組成:符號位、指數部分和尾數部分。符號位表示數的正負,指數部分決定數值的大小範圍和小數點的位置,尾數部分決定數值的精度。這種表示方法使得小數點的位置可以浮動,因此稱為浮點數。

浮點數的表示範圍遠大於定點數。對於相同的位數,定點數只能表示固定範圍內的數值,而浮點數通過調整指數可以表示從極小到極大的數值。但需要注意的是,浮點數的精度是有限的,由尾數位數決定,並非所有實數都能精確表示。

2. IEEE 754標準

為了統一不同計算機系統中浮點數的表示方法,IEEE(電氣和電子工程師協會)制定了IEEE 754標準。該標準定義了浮點數的格式、運算規則和特殊值的表示,已成為業界公認的浮點數標準。IEEE 754標準規定了單精度(32位)和雙精度(64位)兩種基本格式。

單精度浮點數使用32位表示,格式分配如下。第0位(最高位)為符號位計算機組成原理——浮點數的表示_單精度_10,第1位到第8位共8位為指數部分計算機組成原理——浮點數的表示_字段_04,第9位到第31位共23位為尾數部分計算機組成原理——浮點數的表示_單精度_02。雙精度浮點數使用64位表示,其中符號位1位,指數部分11位,尾數部分52位。

IEEE 754標準採用隱藏位技術來提高尾數精度。由於規格化浮點數的尾數總是形如計算機組成原理——浮點數的表示_#排序算法_13的形式,最高位總是1,因此可以將這個隱含的1省略不存儲,僅存儲小數部分。這樣,32位單精度浮點數雖然只有23位尾數存儲空間,但實際精度相當於24位。

指數部分採用移碼錶示,即在真實指數值上加一個偏移量。對於單精度浮點數,偏移量為127;對於雙精度浮點數,偏移量為1023。這種表示方法使得指數的比較可以像無符號整數一樣進行,簡化了浮點數的比較操作。例如,真實指數為3時,單精度浮點數的指數字段值為計算機組成原理——浮點數的表示_浮點數_14,即二進制10000010。

3. IEEE 754標準的數值表示

IEEE 754標準根據指數和尾數的不同取值,將浮點數分為規格化數、非規格化數、無窮大和非數(NaN)四類。

規格化數是最常見的浮點數形式,其指數字段既不全為0也不全為1。對於單精度浮點數,指數字段的值在1到254之間。規格化數的真實值計算公式為:計算機組成原理——浮點數的表示_#排序算法_15。其中計算機組成原理——浮點數的表示_單精度_16表示隱含的1加上23位尾數小數部分。例如,如果計算機組成原理——浮點數的表示_字段_17計算機組成原理——浮點數的表示_字段_18(十進制130),計算機組成原理——浮點數的表示_單精度_02的二進制為01000000000000000000000,則該浮點數表示計算機組成原理——浮點數的表示_單精度_20

非規格化數用於表示非常接近零的小數,其指數字段全為0。此時不再有隱含的1,真實值計算公式為:計算機組成原理——浮點數的表示_浮點數_21。非規格化數填補了0和最小規格化數之間的空白,使得浮點數的表示更加連續。

當指數字段全為1時,表示特殊值。如果尾數字段全為0,表示無窮大,符號位決定是正無窮還是負無窮。如果尾數字段不全為0,表示非數NaN,用於表示未定義或無法表示的運算結果,如計算機組成原理——浮點數的表示_浮點數_22計算機組成原理——浮點數的表示_單精度_23

圖2.18展示了32位格式浮點數的表示範圍分佈。從圖中可以看出,浮點數的表示範圍被零點分為正數和負數兩個對稱的區域。在正數區域,最小的規格化正數為計算機組成原理——浮點數的表示_浮點數_24,最大的規格化正數約為計算機組成原理——浮點數的表示_單精度_25。在0到最小規格化數之間,是非規格化數的表示範圍,最小的非規格化正數為計算機組成原理——浮點數的表示_浮點數_26。負數區域的分佈與正數區域對稱。需要注意的是,在負數的規格化範圍內存在負上溢區域,在接近零的位置存在負下溢區域,這些溢出情況需要在浮點運算中特別處理。圖中零點位於中央,正負無窮分別位於兩端,體現了浮點數表示的完整性和對稱性。

4. 浮點數表示的特點

浮點數表示具有一些重要特點。首先,浮點數的分佈是不均勻的,靠近零的地方數值密集,遠離零的地方數值稀疏。這種特性使得浮點數在表示小數時具有較高的相對精度,但絕對精度會隨數值大小而變化。

其次,浮點數存在表示誤差。並非所有實數都能精確表示為浮點數,大多數十進制小數轉換為二進制後都是無限循環小數,只能近似表示。例如,十進制的計算機組成原理——浮點數的表示_#排序算法_27在二進制中是無限循環小數,轉換為浮點數後存在舍入誤差。

最後,浮點數的運算不滿足結合律和分配律等代數定律。由於舍入誤差的存在,計算機組成原理——浮點數的表示_單精度_28可能不等於計算機組成原理——浮點數的表示_單精度_29。這要求在進行浮點運算時必須考慮誤差累積的影響,選擇合適的算法以提高數值穩定性。