浮點數——計算機組成原理筆記


浮點數——計算機組成原理筆記

一、浮點數簡介

​ 浮點數是計算機中的一個數值型數據;與之相對應的概念是定點數;本篇筆記建議配合《計算機組成原理——面向實踐培養》食用~

​ 首先我們來介紹原理性的浮點數格式

img

​ 在這個圖中,主要分為兩部分,一個是包含階符的階碼,另一個是包含數符的尾數;在二進制中,真值和浮點數的對應關系如下:

\[x=2^E*M \]

​ 也就是,浮點數的值等於系數和一個指數的乘積,這個指數的就是階碼所表示的值,系數就是尾數所表示的值,這里相當於是一個科學計數法

​ 在九年義務教育中我們知道,一個科學計數法可以寫成很多種不同的形式,為了方便我們處理,我們會把它統一成一個形式,這個過程就叫做規范化,為了方便我們接下來介紹和理解浮點數,在這里告訴大家,這個式子中的M也就是尾數,是一個純小數(絕對值小於等於1)

​ 計算機中機器數的運算通常使用補碼,所以有時候我們的浮點數的階碼和尾數會采用補碼表示(還有用移碼表示的,后面會介紹移碼的計算方法)

​ 經過了感性的認識,接下來我們將會舉例說明一個浮點數和其真值之間的細節

二、一個浮點數實例

​ 假設這里有一個浮點數,階碼使用補碼表示,共8位,包含1位階符;尾數也使用補碼表示,同為8位,包含一位數符;下面,首先我們來探索這個浮點數的典型值,我們很容易想到有四種典型值:最小負數,最大正數,最小正數,最大負數

​ 首先我們來看最簡單的情況,最大正數,要完整分析浮點數,我們應該了解這個浮點數的機器數表示和真值表示;回想一下我們所提到的科學計數法不難想到,想要得到最大正數,我們應該使階碼為最大的正直,且尾數為最大的正小數,(馬上就會提到規范化問題)

​ 首先我們來看階碼,階碼是用補碼表示的,拋去最高的符號位,我們有7位用來表示“數值”(簡單理解下)那么很容易想到,最大的數應該是7位全取1,第一位取0(原碼),此時階碼的真值為 \(2^7\) ,而我們的階碼是是用補碼表示的,轉換為補碼之后仍為01111111(7個1)

​ 緊接着是尾數,最大的尾數原碼表示的話應該是0.1111111,轉化成補碼,仍然為0.1111111,也就是說,最大的正數結果如下:

\[0111111101111111,真值為(1-2^{-n})*2^{2^n-1} \]

(此式中n=7)上面說了,為了使結果唯一,我們要進行規范化,我把規范化相關的內容放在最后一張圖片上了,這里規范化的結果就是上面的結果

最大負數

​ 思路和上面的一樣,首先我們來看階碼,很容易想到階碼應該仍保持最大值,也就是\(2^n\),現在我們來找,絕對值最大的負的尾數,這里又涉及到原碼補碼的區別和聯系,我們這個浮點數是使用補碼來表示的,我們找的時候就應該找,我們所能表示的補碼中,最小的負數,那么是不是我們可以先寫出原碼,然后轉化成補碼呢?在這里不可以,因為補碼和原碼所能表示的范圍是不一樣的,請牢記下圖:

img

​ 我們看到因為原碼有兩個零,所以表示原碼能夠表示的最小負數,比補碼能表示的最小負數大,放到純小數也一樣,那么我們這里尾數的取值就很好理解了,他就是1.0···00;最后我們得到的結果為

\[0111111110000000,真值為(-1)*2^{2^n-1} \]

最小正數

​ 階碼需要取最小值,也就是負的絕對值最大的值,因為同樣是使用補碼表示,所以根據上面那個圖,我們得到階碼為10000000;尾數為正的最小值,也就是0.0000001;轉化成補碼仍為0.0000001,但是,這個不滿足規范化,請查看下面關於規范化的描述;所以我們得到的規范化的最小正尾數,應該是0.1000000(即1/2),最終結果為:

\[1000000001000000,真值為(\frac{1}{2})*2^{-2^n} \]

最大負數

​ 最大負數就是絕對值最小的負數,通最小正數一樣,階碼為10000000,現在我們尋找:絕對值最小的、負的,尾數,根據我們求最小正數時的思路,他應該是1.0000001的補碼,但是這個值的真值並不滿足規范化,查看規范化的要求之后我們發現,我們所求的尾數,應該是1.1000001,他的補碼是1.0111111;

\[1000000010111111,真值為(-\frac {1}{2}-2^{-n})*2^{-2^n} \]

  • 尾數的規范化:

    在《計算機組成原理——面向實踐培養》一書中有這樣一句話:“若浮點數用補碼表示,此時規格化尾數的符號位與最高有效位剛好相反”,那么為什么相反,實際上涉及到補碼的知識,需要對補碼有較為熟悉的了解才行,只知道概念是不夠的

    image-20210316185642816

三、總結

​ 本身尋找典型值不難,科學計數法大家也都好理解,比較令人感到陌生的是補碼的,和補碼的規范化形式;首先我們應該知道補碼和原碼所能表示的真值范圍是不一樣的,也就是絕對值最大的那個負值,第二個就是關於規范化,記住上面四種情況,對應着求就行了

四、IEEE754

​ 我把書上的內容直接借鑒過來了,因為感覺比較好理解,也不需要額外強調什么點

img

img

本篇到此結束,如果發現有不對的地方請及時指出,感謝🙇‍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM