《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 計(jì)算機(jī)系統(tǒng)原理(十一) 二進(jìn)制浮點(diǎn)數(shù)和IEEE標(biāo)準(zhǔn)

計(jì)算機(jī)系統(tǒng)原理(十一) 二進(jìn)制浮點(diǎn)數(shù)和IEEE標(biāo)準(zhǔn)

2017-06-22
關(guān)鍵詞: 匯編語言

2.6我們進(jìn)行了二進(jìn)制整數(shù)運(yùn)算的最后一役,,本次LZ將和各位一起進(jìn)入浮點(diǎn)數(shù)的世界,,這里沒有無符號,沒有補(bǔ)碼,,但是有各種各樣的驚奇,。倘若你真正的進(jìn)入了浮點(diǎn)數(shù)的世界,一定會發(fā)現(xiàn)它原來是這么有意思,,而不是像之前一樣,,覺得了解浮點(diǎn)數(shù)的內(nèi)容沒什么用,只要會簡單的使用就行了,。當(dāng)然,,這其中也可能有部分猿友是覺得這部分內(nèi)容太難,而對它失去了學(xué)習(xí)的興趣,。

就像之前的LZ一樣,,曾經(jīng)對IEEE標(biāo)準(zhǔn)望而卻步,不過相信這幾章浮點(diǎn)數(shù)的介紹會讓你有種頓悟的感覺,。倘若你有了這樣的感覺,,也不要忘了“點(diǎn)個(gè)推薦哦?!?/p>

引言

整數(shù)運(yùn)算雖然能解決計(jì)算機(jī)當(dāng)中有關(guān)信息的很大一部分儲存,、運(yùn)算等功能,但卻是仍然不夠的,。否則假設(shè)我們要做一個(gè)超市的庫存管理系統(tǒng),,那么所有商品的價(jià)格都只能是整數(shù),這是不是讓你難以接受呢,。

因此有時(shí)候我們需要更精確的數(shù)值表示,,這就需要浮點(diǎn)數(shù)出場了。對于浮點(diǎn)數(shù)的表示以及運(yùn)算規(guī)則,,在以前是各個(gè)計(jì)算機(jī)制造商各自有一套自己的標(biāo)準(zhǔn),,這給程序的可移植性造成了很大的困擾。

有需求就有創(chuàng)新,,最終在1985年左右,,浮點(diǎn)數(shù)標(biāo)準(zhǔn)IEEE754就應(yīng)運(yùn)而生了,。它就像一代秦始皇一樣,,一統(tǒng)浮點(diǎn)數(shù)世界。秦始皇統(tǒng)一了文字,、貨幣等,,而IEEE754統(tǒng)一了浮點(diǎn)數(shù)的標(biāo)準(zhǔn)。

浮點(diǎn)數(shù)不僅僅是為了讓數(shù)值的表示更加精確,,也是為了表示一些整數(shù)無法達(dá)到的數(shù)字,,比如一些接近于0的數(shù)字,,或者一些非常大的數(shù)值。因此浮點(diǎn)數(shù)對于計(jì)算機(jī)的意義,,可以說是相當(dāng)之大,。

二進(jìn)制小數(shù)

盡管我們本章的主要內(nèi)容應(yīng)該是IEEE標(biāo)準(zhǔn),不過我們先來看看二進(jìn)制是如何表示小數(shù)的,,這有助于我們理解浮點(diǎn)數(shù)的表示,。如果是一個(gè)十進(jìn)制小數(shù),相信各位都再熟悉不過了,,對于12345.6789來說,,它的值是由下列式子得到的。

   12345.6789 = 1 * 104 + 2 * 103 + 3 * 102 + 4 * 101 + 5 * 100 + 6 * 10-1 + 7 * 10-2 + 8 * 10-3 +  9 * 10-4

這對我們來說應(yīng)該是常識,,那么對于二進(jìn)制小數(shù)也是類似的,,考慮這樣一個(gè)小數(shù)10010.1110,它的值則可以由以下式子得到,。

   10010.1110 = 1 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 0 * 20 + 1 * 2-1 + 1 * 2-2 + 1 * 2-3 +  0 * 2-4 = 16 + 2 + 1/2 + 1/4 + 1/8 = 18.875

從這個(gè)角度來看,,二進(jìn)制小數(shù)其實(shí)與十進(jìn)制小數(shù)是一樣的計(jì)算方式,只是這里是2的整數(shù)次冪而已,。

在書中給出了二進(jìn)制小數(shù)的公式,,對于一個(gè)形式為bm....b0.b-1....b-n的二進(jìn)制小數(shù)b來說,它的值為以下計(jì)算方式,。

這里需要提醒的是,,二進(jìn)制小數(shù)不像整數(shù)一樣,只要位數(shù)足夠,,它就可以表示所有整數(shù),。二進(jìn)制小數(shù)無法精確的表示任意小數(shù),比如最簡單的,,十進(jìn)制小數(shù)0.3這樣一個(gè)小數(shù),,二進(jìn)制是無法精確的表示它的。

IEEE標(biāo)準(zhǔn)

IEEE標(biāo)準(zhǔn)采用類似于科學(xué)計(jì)數(shù)法的方式表示浮點(diǎn)小數(shù),,即我們將每一個(gè)浮點(diǎn)數(shù)表示為 V = (-1)s * M * 2E ,。

這其中s為符號位,為0時(shí)為正,,為1時(shí)為負(fù),。M為尾數(shù),是一個(gè)二進(jìn)制小數(shù),,它的范圍是0至1-ε,,或者1至2-ε(ε的值一般是2-k次方,其中設(shè)k > 0)。E為階碼,,是一個(gè)二進(jìn)制整數(shù),,可正可負(fù),為了給尾數(shù)加權(quán),。

浮點(diǎn)格式分為兩種,,一種是單精度,一種是雙精度,。單雙精度分別對應(yīng)于編程語言當(dāng)中的float和double類型,。其中float是單精度的,采用32位二進(jìn)制表示,,其中1位符號位,,8位階碼以及23位尾數(shù)。double是雙精度的,,采用64位二進(jìn)制表示,,其中1位符號位,11位階碼以及52位尾數(shù),。

從上面的位數(shù)上就能看出,,雙精度浮點(diǎn)數(shù)所表示的范圍將遠(yuǎn)遠(yuǎn)大于單精度浮點(diǎn)數(shù)。針對階碼E的值,,浮點(diǎn)數(shù)的值可以分為三種不同的情況,,分別是規(guī)格化的,非規(guī)格化的以及特殊值,,這三種情況就是浮點(diǎn)數(shù)的奧義所在了,。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。