官术网_书友最值得收藏!

1.6 表示實數(shù)

到目前為止,我們已經(jīng)設(shè)法用二進制來表示整數(shù)。但是,如何表示實數(shù)呢?實數(shù)在十進制中包括一個小數(shù)點。我們需要一些方法來表示等價二進制點。同樣,這可以通過在不同語境解釋二進制位來實現(xiàn)。

1.6.1 定點表示法

用二進制表示分數(shù)的一種方法是任意選擇一個二進制點(小數(shù)點的二進制等價物)位置。比如,如果有4個位,我們可以假設(shè)其中兩個位在二進制點的右邊,表示4個小數(shù),而另外兩個位在左邊,表示4個整數(shù)。這就是所謂的定點表示法,因為二進制點的位置是固定的。表1-7展示了其工作原理。

表1-7 定點二進制數(shù)字

從二進制記數(shù)法來看,點左邊的整數(shù)應(yīng)該看起來很熟悉。與整數(shù)表示類似,點的右邊兩位可以表示4個值,代表的是四分之一,而不是我們熟悉的十進制中的十分之一。

雖然這種方法很好用,但在通用型計算機中并不常用,因為它需要太多的位來表示有用的數(shù)字范圍。某些被稱為數(shù)字信號處理器(Digital Signal Processor, DSP)的特殊用途計算機仍然使用定點數(shù)。而且第11章將提到定點數(shù)在某些應(yīng)用中是有用的。

通用型計算機是為了解決通用型問題而建立的,涉及的數(shù)字范圍很廣。你可以通過瀏覽物理學讀物,對這個范圍有一定的概念。例如,有如普朗克常數(shù)(6.63×10–34J·S)的微小數(shù)字,也有如阿伏伽德羅常數(shù)(6.02×1023mol–1)的大數(shù)字。這是一個相差1057的范圍,大約是2191。這幾乎需要200個比特!用幾百個比特去表示這里面的每一個數(shù)字成本可真是不低,所以我們需要尋找其他的解決方法。

1.6.2 浮點表示法

我們用二進制版本的科學記數(shù)法來解決這個問題,科學記數(shù)法常用于表示包括普朗克常數(shù)和阿伏伽德羅常數(shù)在內(nèi)的大量級的數(shù)字。科學記數(shù)法創(chuàng)造了一個新的解釋語境,以表示巨大范圍內(nèi)的數(shù)字。它使用小數(shù)點左邊是個位的數(shù)字(稱為尾數(shù))乘以10的冪(稱為指數(shù))來表示。計算機也使用與這類似的表示方法,不過尾數(shù)和指數(shù)是二進制數(shù),而底數(shù)10變成了2。

以上就是浮點表示法,這讓人很困惑,因為二進制(十進制)點總是在同一個位置:在一和二分之一(十進制的十分之一)之間。“浮點”只是科學記數(shù)法的另一種說法,我們使用浮點把數(shù)字表示為1.2×10–3,而不是0.0012。

請注意,我們無須使用任何比特來表示底數(shù)2,因為浮點定義默認底數(shù)為2。通過將有效數(shù)字和指數(shù)分開,浮點表示法可以表示非常小或非常大的數(shù)字,無須存儲所有數(shù)字中含有的零。

表1-8顯示了4位的浮點表示法,其中2位為尾數(shù),2位為指數(shù)。

表1-8 浮點二進制數(shù)字

雖然這個例子只使用了幾個位,但仍揭示了浮點表示法中存在的一些低效率問題。首先,存在很多浪費的位組合。例如,有四種方式表示0,有兩種方式表示1.0、2.0和4.0。其次,并不是每個數(shù)字都有表示它的位型,而且當數(shù)字變大時,指數(shù)會使數(shù)字之間的距離更大。這帶來的一個副作用是,我們可以把0.5和0.5相加得到1.0,但無法把0.5和6.0相加,因為沒有表示6.5的位型。(數(shù)學中有一個分支叫作數(shù)值分析,涉及對計算的不準確程度的跟蹤。)

1.6.3 IEEE浮點標準

奇怪的是,浮點表示法是表示實數(shù)的標準方法。浮點表示法使用的位比表1-8中使用的更多,而且有兩個符號,一個用于表示尾數(shù),另一個隱藏的符號是指數(shù)的一部分。還存在很多技巧,可以確保像四舍五入這樣的運算盡可能地成功,并盡量減少浪費的位組合數(shù)量。名為IEEE 754的標準將所有這些都列了出來。IEEE(Institute of Electrical and Electronic Engineer)代表美國電氣電子工程師協(xié)會,它是一個專業(yè)組織,其業(yè)務(wù)包括制作標準。

我們希望在可用的位數(shù)下,最大限度地提高精度。有個巧妙的技巧叫作歸一化,它可以調(diào)整尾數(shù),所以不需要前導(即在左邊)的零。每次調(diào)整尾數(shù)都需要對指數(shù)進行相應(yīng)的調(diào)整。第二種技巧來自數(shù)字設(shè)備公司(Digital Equipment Corporation, DEC),它扔掉了尾數(shù)最左邊的那一位(因為我們知道最左邊那一個位永遠是1),將精度提高了一倍,也多了一個位的空間。

你不需要知道IEEE 754標準所有煩瑣的細節(jié)。但你應(yīng)該知道經(jīng)常會遇到的兩種類型的浮點數(shù):單精度浮點數(shù)和雙精度浮點數(shù)。單精度數(shù)字使用32位表示,可以表示大約在±10±38范圍內(nèi)的數(shù)字,可精確到7位數(shù)。雙精度數(shù)字使用64位表示,可以表示的數(shù)字范圍更廣,約在±10±308,可精確到15位數(shù)。圖1-13顯示了它們的排列方式。

圖1-13 IEEE浮點數(shù)格式

這兩種格式都有一個符號位,即圖1-13中的S。可以看到,雙精度浮點數(shù)比單精度浮點數(shù)多了3個指數(shù)位,范圍是單精度的8倍。雙精度浮點數(shù)也比單精度浮點數(shù)多了29個尾數(shù)位,精度更高。然而,代價是雙精度浮點數(shù)要比單精度浮點數(shù)多占一倍的位數(shù)。

你可能已經(jīng)注意到,指數(shù)值沒有明確的符號位。IEEE 754的設(shè)計者將所有0和所有1的指數(shù)值都設(shè)計為有特殊意義,所以實際的指數(shù)值必須被壓縮到剩余的位型中。他們使用偏置(偏移)指數(shù)值來實現(xiàn)這點。對于單精度浮點數(shù),偏移值是127,這意味著127(01111111)的位型代表指數(shù)值為0。1(00000001)的位型代表指數(shù)值為–126,254(11111110)的位型代表指數(shù)值+127。雙精度浮點數(shù)也類似,只不過它的偏移值為1 023。

IEEE 754的另一個方便之處是,它有特殊的位組合,可以表示除以0之類的東西,它的值為正負無窮大。它還指定了一個叫作NaN的特殊值,代表“不是數(shù)字”,所以如果你發(fā)現(xiàn)處于NaN狀態(tài),可能意味著你做了一些不合理的算術(shù)運算。這些特殊的位組合使用了前面討論過的保留指數(shù)值。

主站蜘蛛池模板: 稷山县| 喀喇沁旗| 罗平县| 谷城县| 江门市| 古交市| 德州市| 房产| 毕节市| 恩平市| 当涂县| 廊坊市| 赤壁市| 西峡县| 静乐县| 苏尼特右旗| 凉山| 祁门县| 佛冈县| 云梦县| 仪陇县| 平潭县| 钦州市| 衡山县| 温州市| 瑞丽市| 蚌埠市| 井冈山市| 璧山县| 东丰县| 龙州县| 大丰市| 大安市| 嫩江县| 绥芬河市| 凤凰县| 墨竹工卡县| 土默特右旗| 安丘市| 广州市| 枣庄市|