計算機組成原理第二章:運算方法和運算器

本文內容:定點運算,浮點運算,定點運算器和浮點運算器。

思維導圖

在上篇文章中 計算機組成原理:數據與文字的表示方法 ,我們已經知道了數據與文字在計算機中是怎麼表示的。在這一篇中,我們將知道數據是如何在計算機中運算的(運算方法),及是如何實現的(運算器)。

這裏寫圖片描述

本文介紹定點運算和浮點運算及其運算器。定點運算中包括定點加法、減法;定點乘法;定點除法;定點運算器。浮點運算中包括浮點加法、減法;浮點乘法;浮點除法;浮點運算器。

定點運算

定點加法、減法

在上篇文章中 計算機組成原理:數據與文字的表示方法,我們已經介紹了數的補碼錶示法,負數用補碼錶示後,就可以和正數一樣來處理。這樣,運算器裏只需要一個加法器就可以了,不必爲了負數的加法運算,再配一個減法器。

定點數的加法、減法,實際上就是補碼加法、減法。

補碼加法

補碼加法運算基本公式

  • 定點整數:[x+y]補[x+y]補 = [x]補[x]補 + [y]補[y]補 (mod 2n+12n+1 )
  • 定點小數:[x+y]補[x+y]補 = [x]補[x]補 + [y]補[y]補 (mod 22 )

簡單來說,只需將符號位和數值部分一起參與運算,並且將符號位產生的進位丟掉即可

證明:

(1)證明依據:補碼的定義

若 定點整數的補碼形式爲 x = xnxn xn−1xn−1 xn−2xn−2 …… x1x1 x0x0 (xnxn 爲符號位),則補碼錶示的定義是:

這裏寫圖片描述

(2)證明思路:分三種情況。

  1. x、y均爲正值(x﹥0,y﹥0)

  2. x、y一正一負(x﹥0,y﹤0 或者x<0,y>0)

  3. x、y均爲負值(x<0,y<0)

證明定點小數的補碼加法:(定點整數的證明類似,此處不再證明)

1、x﹥0,y﹥0

[x]補[x]補 + [y]補[y]補 = x+y = [x+y]補[x+y]補 (mod 22 )

2、x﹥0,y﹤0 (x<0,y>0 的證明與此類似)

根據定義 [x]補[x]補 = x,[y]補[y]補 = 2+y

所以

[x]補[x]補 + [y]補[y]補 = x+2+y = 2+(x+y)

這個地方要考慮 進位的問題。

當 x+y>0 時,2+(x+y) > 2 ,進位 2 必丟失;

故 [x]補[x]補 + [y]補[y]補 = x+y = [x+y]補[x+y]補 (mod 2)

當 x+y<0 時,2+(x+y) < 2 ;

故 [x]補[x]補 + [y]補[y]補 = 2+(x+y) = [x+y]補[x+y]補 (mod 2)

3、x<0,y<0

根據定義 [x]補[x]補 = 2+x,[y]補[y]補 = 2+y

所以

[x]補[x]補 + [y]補[y]補
= 2+x+2+y
= 2+(2+x+y)
= 2+ [x+y]補[x+y]補 (mod 2)
= [x+y]補[x+y]補

注:不懂mod 2 的可以轉至上一篇 計算機組成原理:數據與文字的表示方法 查看補碼的推導

定點數補碼加法舉例

這裏寫圖片描述

補碼減法

補碼減法運算基本公式

  • 定點整數:[x−y]補[x−y]補 = [x]補[x]補 - [y]補[y]補 = [x]補[x]補 + [−y]補[−y]補 (mod 2n+12n+1 )
  • 定點小數:[x−y]補[x−y]補 = [x]補[x]補 - [y]補[y]補 = [x]補[x]補 + [−y]補[−y]補 (mod 22 )

證明:只需要證明 [−y]補[−y]補 = - [y]補[y]補

已證明 [x+y]補[x+y]補 = [x]補[x]補 + [y]補[y]補

故 [y]補[y]補 =[x]補[x]補 + [y]補[y]補 - [x]補[x]補 = [x+y]補[x+y]補 - [x]補[x]補

又 [x−y]補[x−y]補 = [x+(−y)]補[x+(−y)]補 = [x]補[x]補 + [−y]補[−y]補

故 [−y]補[−y]補 = [x−y]補[x−y]補 - [x]補[x]補

可得 [y]補[y]補 + [−y]補[−y]補
= [x+y]補[x+y]補 + [x−y]補[x−y]補 - [x]補[x]補 - [x]補[x]補
= [x+y+x−y]補[x+y+x−y]補 - [x]補[x]補 - [x]補[x]補
= [x+x]補[x+x]補 - [x]補[x]補 - [x]補[x]補
= 0

即證。

[−y]補[−y]補 等於 對 [y]補[y]補 包括符號位取反且最末位加1

定點數補碼減法舉例

例1:已知 x1x1 = - 1110,x2x2 = + 1101,求:[x1]補[x1]補 ,[−x1]補[−x1]補 ,[x2]補[x2]補 ,[−x2]補[−x2]補 。

解:

[x1]補[x1]補 = 1 0010

[−x1]補[−x1]補 = 0 1101+0 0001= 0 1110

[x2]補[x2]補 = 0 1101

[−x2]補[−x2]補 =1 0010+0 0001= 1 0011

例2:x=+1101,y=+0110,求x-y。

解:

[x]補[x]補 = 0 1101,[y]補[y]補 = 0 0110,[−y]補[−y]補 = 1 1010

[x−y]補[x−y]補
= [x]補[x]補 + [−y]補[−y]補
= 0 1101 +1 1010
= 10 0111
= 0 0111(符號位產生的進位捨去)

故 x-y=+0111

溢出概念與檢測方法

在定點整數機器中,數的表示範圍 −2n−2n < x < 2n−12n−1 (補碼錶示)。在運算過程中。若數的大小超出了定點數能表示的範圍,稱爲“溢出”。

上溢(正溢):數據大於機器所能表示的最大正數;

下溢(負溢):數據小於機器所能表示的最小負數

例如:4位補碼錶示的定點整數,範圍爲[-8,+7]

  • 若x = 5,y = 4,則 x+y 產生上溢
  • 若x = -5,y = -4,則 x+y 產生下溢
  • 若x = 5,y = -4,則 x-y 產生上溢

溢出判別方法

  1. 直接判別法
  2. 變形補碼判別法(雙符號位法)
  3. 進位判別法(單符號位法)

溢出判別方法——直接判別法

方法:

  • 同號補碼相加,結果符號位與加數相反;
  • 異號補碼相減,結果符號位與減數相同;

特點:硬件實現較複雜;

舉例:

  • 若 [x]補[x]補 = 0 101,[y]補[y]補 = 0 100,[x+y]補[x+y]補 = 1 001,上溢
  • 若 [x]補[x]補 = 1 011,[y]補[y]補 = 1 100,[x+y]補[x+y]補 = 0 111,下溢
  • 若 [x]補[x]補 = 0 101,[y]補[y]補 = 1 100 ,[x−y]補[x−y]補 = 1 001,上溢

溢出判別方法——變形補碼判別法(雙符號位法)

變形補碼,也叫模4補碼:採用雙符號位表示補碼

判別方法:

  • 雙符號位 00:正數
  • 雙符號位 01:上溢
  • 雙符號位 10:下溢
  • 雙符號位 11:負數

特點:硬件實現簡單,只需對結果符號位進行異或

舉例:

  • 若 [x]補[x]補 = 00 101,[y]補[y]補 = 00 100,[x+y]補[x+y]補 = 01 001,上溢
  • 若 [x]補[x]補 = 11 011,[y]補[y]補 = 11 100,[x+y]補[x+y]補 = 10 111,下溢
  • 若 [x]補[x]補 = 00 101,[y]補[y]補 = 11 100 ,[x−y]補[x−y]補 = 01 001,上溢

溢出判別方法——進位判別法(單符號位法)

判別方法:最高數值位的進位與符號位的進位是否相同;

判別公式:V = CfCf ⊕ Cn−1Cn−1 ,其中 CfCf 爲符號位產生的進位, Cn−1Cn−1 爲最高數值位產生的進位

簡單來說,當最高有效位產生進位而符號位無進位時,產生正溢;當最高有效位無進位而符號位有進位時,產生負溢,

可以用異或門實現。

回顧邏輯門符號

這裏寫圖片描述

基本的二進制加法/減法器

1 位 二進制數據的全加器

  • 三個輸入:加數:AiAi ,BiBi ,CiCi (低位向本位的進位)
  • 兩個輸出:SiSi (和),Ci+1Ci+1 (本位向高位的進位)

1 位 二進制數據的全加器示意圖

這裏寫圖片描述

全加運算的真值表如圖所示:

這裏寫圖片描述

根據真值表推出兩個輸出的邏輯表達式

方法:將真值表中函數值等於1的變量組合選出來;對於每一個組合,凡取值爲1的變量寫成原變量,取值爲0的變量寫成反變量,各變量相乘後得到一個乘積項;最後,把各個組合對應的乘積項相加,進行化簡後,就得到了相應的邏輯表達式。

兩個輸出端的邏輯表達式

SiSi = Ai¯¯¯¯¯Ai¯ Bi¯¯¯¯¯¯Bi¯ CiCi + Ai¯¯¯¯¯Ai¯ BiBi Ci¯¯¯¯¯Ci¯ + AiAi Bi¯¯¯¯¯¯Bi¯ Ci¯¯¯¯¯Ci¯ + AiAi BiBi CiCi

=AiAi ⊕ BiBi ⊕ CiCi

Ci+1Ci+1 = Ai¯¯¯¯¯Ai¯ BiBi CiCi + AiAi Bi¯¯¯¯¯¯Bi¯ CiCi + AiAi BiBi Ci¯¯¯¯¯Ci¯ + AiAi BiBi CiCi

= AiAi BiBi + BiBi CiCi + CiCi AiAi

= AiAi BiBi +(AiAi ⊕ BiBi )CiCi

根據邏輯表達式,可畫出全加器邏輯結構,如下圖所示:

這裏寫圖片描述

多位二進制數據加法器

  • 兩個 n 位的數據 A = An−1An−1 An−2An−2 ….A1A1 A0A0 ,B = Bn−1Bn−1 Bn−2Bn−2 ….B1B1 B0B0

  • 和 S = Sn−1Sn−1 Sn−2Sn−2 ….S1S1 S0S0

  • 採用 進位判別法 判斷數據的溢出:V = CnCn ⊕ Cn−1Cn−1

多位二進制數據加法器邏輯圖如下所示:

這裏寫圖片描述

多位二進制數據加法/減法器

  • 將減法轉換成加法
    • [A]補[A]補 - [B]補[B]補 = [A]補[A]補 + [−B]補[−B]補
  • 由 [B]補[B]補 求 [−B]補[−B]補
    • [B]補[B]補 包括符號位各位取反,末位加1
  • 將加減法電路合二爲一
    • 使用異或運算。
      當 M=0 時,Bi′Bi′ = BiBi ;
      當 M=1時,Bi′Bi′ = Bi¯¯¯¯¯¯Bi¯

加法轉減法的異或門:

這裏寫圖片描述

多位二進制數據加法/減法器邏輯圖 如下所示:

這裏寫圖片描述

多位二進制加法/減法器的輸出延遲

  • 假如每位均採用一位全加器並考慮溢出檢測,n位行波進位加法器的延遲時間 tata 爲:
    • tata = n * 2T + 9T=(2n+9)T
  • 如果不考慮溢出,則延遲時間ta由Sn-1的輸出延遲決定:
    • tata = (n-1)* 2T +6T +3T = (2(n-1)+9)T
  • 延遲時間 tata
    • 輸入穩定後,在最壞情況下加法器得到穩定的輸出所需的最長時間。
    • 這個時間越小越好

定點乘法

分析筆算乘法

定點計算機中,兩個原碼表示的數相乘的運算規則是:乘積的符號位 由兩數的符號位按異或運算得到,而乘積的數值部分 則是兩個正數相乘之積。

設 n 位被乘數和乘數用定點整數表示(xfxf , yfyf 爲乘數符號):

  • 被乘數:[x]原[x]原 = xfxf xn−1xn−1 ….x1x1 x0x0
  • 乘數:[y]原[y]原 = yfyf yn−1yn−1 ….y1y1 y0y0
  • 乘積:[z]原[z]原 = (xfxf ⊕ yfyf )+ (xn−1xn−1 ….x1x1 x0x0 )(yn−1yn−1 ….y1y1 y0y0 )

乘積符號的運算法則 是:同號相乘爲正,異號相乘爲負。積的符號可按“異或”運算得到。

即:異或運算,異號爲1,則爲負數;同號爲0,則爲正數。

例子

這裏寫圖片描述

特點

  • 符號位單獨處理
  • 乘數的某一位決定是否加被乘數
  • 位積相加
  • 乘積的位數擴大一倍

原碼並行乘法

不帶符號的陣列乘法器 (即 兩個無符號數據的並行乘法電路)

設有兩個不帶符號的二進制整數:

  • A = am−1am−1 ….a1a1 a0a0

  • B = bn−1bn−1 ….b1b1 b0b0

它們的真值分別爲 a 和 b,即

  • a = ∑m−1i=0ai2i∑i=0m−1ai2i

  • b = ∑n−1j=0nj2j∑j=0n−1nj2j

在二進制乘法中,被乘數 A 與乘數 B 相乘,產生 m+n 位乘積 P:

P = pm+n−1pm+n−1 ….p1p1 p0p0

乘積 P 的真值爲:

P = ab = (∑m−1i=0ai2i∑i=0m−1ai2i )(∑n−1j=0nj2j∑j=0n−1nj2j )
= ∑m−1i=0∑n−1j=0(aibj)2i+j∑i=0m−1∑j=0n−1(aibj)2i+j
= ∑m+n−1k=0pk2k∑k=0m+n−1pk2k

實現這個乘法過程所需要的操作和人們的習慣方法非常類似,二進制乘法的運算過程

這裏寫圖片描述

上述過程說明了在 m 位 × n 位 不帶符號的陣列乘法 中的被加數矩陣。每一個部分乘積項(位積) aiai bjbj 叫做一個被加數。這 m×n 個被加數 aiai bjbj 可以用 m×n 個 “與”門並行地產生。如下圖上半部分所示。

m×n位不帶符號的陣列乘法器邏輯框圖

這裏寫圖片描述

接下來說明,並行陣列乘法器的基本原理。下面以 5×5 位並行陣列乘法器爲例,來說明。

首先來看看 5×5 位並行陣列乘法器電路,如下所示

這裏寫圖片描述

其中 FA 是前面 講過的一位二進制全加器。FA 的斜線方向爲進位輸出,豎線方向爲和輸出,而所有 被加數項 的排列和前述 A×B = P 乘法過程中的被加數矩陣相同。圖中用虛線圍住的陣列中最後一行構成了一個行波進位加法器。

再通過 5×5 二進制例題講解。

例題:已知兩個不帶符號的二進制整數A=11011,B=10101,求每一部分乘積項 aiai bjbj 的值與 p9p9 p8p8 ….p0p0 的值

這裏寫圖片描述

帶符號的陣列乘法器 (即 間接補碼乘法電路)

在介紹帶符號的陣列乘法器基本原理前,我們先來看看算術運算部件設計中經常用到的求補電路——對2求補器(即對模爲2的數進行求補操作——二進制)。

下圖示出了一個具有使能控制的二進制對2求補器的電路圖

這裏寫圖片描述

其邏輯表達式如下

C−1C−1 = 0,CiCi = aiai + Ci−1Ci−1

ai∗ai∗ = aiai ⊕ EE Ci−1Ci−1

特點:

  • 採用 按位掃描技術 來執行求補操作
  • E 爲控制信號,由 數據的符號位來控制

對2求補電路的原理

對2求補時,採用按位掃描技術來執行所需要的求補操作。令 A = anan …a1a1 a0a0 是給定的 n+1 位帶符號的數,要求確定它的補碼形式。進行求補的方法 就是從數的最右端 a0a0 開始,由右向左,直到找出第一個“1”例如 aiai = 1,這樣 aiai 以右的每一位,包括 aiai 自己,都保持不變,而 aiai 以左 的每一位都求反,即 1變0,0變1。基於此,橫向鏈式電路中的 第 i 掃描級的輸出 CiCi 爲 1 的條件是:第 i 級的輸入位 aiai = 1,或者第 i 級鏈式輸入 Ci−1Ci−1 = 1.另外,最右端的起始鏈式輸入 C−1C−1 必須永遠置 0。當 控制信號 E 爲 1 時(即該數的符號位爲1,即負數時),啓動對2求補的操作;當 控制信號 E 爲 0 時(正數)時,輸入和輸出相等。

例題

例如,在一個 4位的對2求補器中,如果數爲:1 0110。

那麼,符號位 1 作爲控制信號,進行對2求補操作,輸入是 0110,輸出將是 1010。

(注意,由此我們可以看出,對2求補電路 的功能是求二進制數的補碼,但是輸出時,只有數據位,不包含符號位。

現在我們來討論帶符號的陣列乘法器。下圖示出了(n+1)位 × (n+1)位帶求補器的陣列乘法器邏輯方框圖:

這裏寫圖片描述

設 A = anan an−1an−1 …a1a1 a0a0 和 B = bnbn bn−1bn−1 …b1b1 b0b0 均爲用定點表示的(n+1)位帶符號整數。由上圖可以看到,在進行完必要的求補操作以後,A 和 B 的數值位傳送給 n位 × n位 不帶符號的陣列乘法器,並由此產生 2n 位乘積爲

  • A × B = P = p2n−1p2n−1 …p1p1 p0p0
  • p2n−1p2n−1 = anan ⊕ bnbn

其中,p2n−1p2n−1 爲符號位

帶求補器的陣列乘法器,既使用於原碼乘法,也使用於間接的補碼乘法。不過,在原碼乘法中,算前求補和算後求補都不需要,因爲輸入數據是立即可用的。而間接的補碼陣列乘法卻需要 3個求補器

以下將介紹 3 個求補器的作用:

其中兩個算前求補器的作用 是:將兩個操作數 A 和 B 在被不帶符號的乘法陣列(核心部件)相乘之前。若該數的符號位爲1(負數),則對它的數值位進行求補操作,並將 求補後的數值位 輸入給 不帶符號的乘法陣列(核心部件);若該數的符號位爲0(正數),則將它的數值位輸入給 不帶符號的乘法陣列(核心部件)

算後求補器的作用 是:當兩個操作數的符號不一致時(如01,10 相乘後,結果爲負數,符號位爲0),對 乘法陣列得到的結果,進行求補操作;當兩個操作數的符號一致時(正數),則直接將 乘法陣列得到的結果 輸出。

以下將給出 3個例題來理解 帶符號的陣列乘法器

例 1:設 x=+15,y=-13,用帶求補器的原碼陣列乘法器求出乘積 x·y=?

這裏寫圖片描述

例 2:設 x=+15,y=-13,用帶求補器的補碼陣列乘法器求出乘積 x·y=?

這裏寫圖片描述

例 3: 設 x= -15,y=-13,用帶求補器的補碼陣列乘法器求出乘積 x·y=?

這裏寫圖片描述

直接補碼並行乘法

直接補碼並行乘法——符號位參與運算,可以完成補碼數的“直接”乘法,而不需要計算原值。

補碼與真值的轉換公式

假設有 N+1 位定點補碼整數 [N]補[N]補 = anan an−1an−1 …a1a1 a0a0 ,其中 anan 爲符號位。根據 [N]補[N]補 的符號,補碼數 [N]補[N]補 和 真值 N 的關係可以表示爲

這裏寫圖片描述

若把負權因數 −2n−2n 強加到符號位 anan 上,那麼就可以把上述方程組中的兩個位值表達式合併成下面的統一形式

這裏寫圖片描述

例題:已知 [N]補[N]補 = 01101,[−N]補[−N]補 = 10011,求 [N]補[N]補 和 [−N]補[−N]補 具有的數值。

這裏寫圖片描述

一般化的全加器格式

通過把正權或負權加到輸入/輸出端,可以歸納出四類加法單元。

這裏寫圖片描述

直接補碼陣列乘法器

利用混合型的全加器就可以構成直接補碼陣列乘法器。設被乘數 A 和乘數 B 是兩個 5 位的二進制補碼,即

  • A = (a4a4 )a3a3 a2a2 a1a1 a0a0
  • B = (b4b4 )b3b3 b2b2 b1b1 b0b0

它們具有帶負權的符號位 a4a4 和 b4b4 ,並用括號標註。如果我們用括號來標註負的被加項,例(aiai bjbj ),那麼 A 和 B 相乘過程中所包括的操作步驟如下面矩陣所示:

這裏寫圖片描述

5 位 × 5 位 的直接補碼陣列乘法器邏輯原理如下圖所示

這裏寫圖片描述

例題:設 [A]補[A]補 = (01101)2(01101)2 ,[B]補[B]補 = (11011)2(11011)2 ,求 [A×B]補[A×B]補 = ?

這裏寫圖片描述

定點運算器

邏輯運算

四種基本的邏輯運算

  • 邏輯非:也稱求反,按位求它的反
  • 邏輯加:按位求他們的“或”,用“ + ”來表示
  • 邏輯乘:按位求他們的“與”,用 “ · ”來表示
  • 邏輯異:用 “ ⊕ ”來表示

多功能算術/邏輯運算單元(ALU)

在 本文定點加法、減法 中,我們已經知道 一位全加器(FA)的邏輯表達式爲

FiFi = AiAi ⊕ BiBi ⊕ CiCi

Ci+1Ci+1 = AiAi BiBi +(AiAi ⊕ BiBi )CiCi

(FiFi 是第 i 位的和,AiAi 和 BiBi 是第 i 位的被加數和加數,CiCi 是第 i 位的進位輸入,Ci+1Ci+1 是第 i 位的進位輸出)

ALU 設計思想:

  • AiAi 和 BiBi 參與運算之前,先轉換爲組合函數 XiXi 和 YiYi 的形式;
  • 該轉換過程由參數 S0S0 ,S1S1 ,S2S2 ,S3S3 控制
  • 再將 XiXi 和 YiYi 和 下一位進位數 通過全加器進行計算

ALU 邏輯結構原理框圖:

這裏寫圖片描述

因此,一位算術/邏輯運算單元的邏輯表達式爲:

FiFi = XiXi ⊕ YiYi ⊕ Cn+iCn+i

Cn+i+1Cn+i+1 = XiXi YiYi + YiYi Cn+iCn+i + Cn+iCn+i XiXi

XiXi YiYi 與控制參數和輸入量的關係

這裏寫圖片描述

74181ALU 算術/邏輯運算功能表

這裏寫圖片描述

  • 控制端
    • S0S0 ,S1S1 ,S2S2 ,S3S3 :控制 ALU 的運算方式
    • M:控制 ALU 的運算類型——算術運算還是邏輯運算
  • 算術運算與邏輯運算的差別:是否考慮進位
    • 算術運算:每一位都需要考慮前一位的進位狀態
    • 邏輯運算:每一位運算都是獨立進行的,不考慮進位
  • 74181 ALU 芯片有正邏輯、負邏輯之分
    • 正邏輯:1 表示高電平,0 表示低電平
    • 負邏輯:0 表示高電平,1 表示低電平

內部總線

  • 根據總線所在位置分
    • 內部總線:CPU 內部各部件的連線
    • 外部總線:指系統總線,即 CPU 與存儲器、I/O 系統之間的連線
  • 按總線的邏輯結構分
    • 單向總線:信息只能向一個方向傳送
    • 雙向總線:信息可以分兩個方向傳送,既可以發送數據,也可以接受數據

定點運算器的基本結構

  • 單總線結構的運算器
    • 同一時間內,只能有一個操作數放在單總線上
    • 缺點:操作速度較慢
    • 優點:控制電路比較簡單
  • 雙總線結構的運算器
    • 兩個操作數同時加到 ALU 進行運算
  • 三總線結構的運算器
    • ALU 的兩個輸入端分別由兩條總線供給
    • ALU 的輸出則與第三條總線相連

浮點運算

浮點加法、減法

設有兩個浮點數 x 和 y,它們分別爲

x = 2Ex2Ex · MxMx
y = 2Ey2Ey · MyMy

其中,ExEx 和 EyEy 分別爲數 x 和 y 的階碼,MxMx 和 MyMy 爲數 x 和 y 的尾數

兩浮點數進行加法和減法的運算規則是

z = x ± y = (MxMx 2Ex−Ey2Ex−Ey ± MyMy )2Ey2Ey ,ExEx <= EyEy

浮點數加減運算的步驟

  1. 0 操作數檢查:一個操作數爲 0,則不必運算,節省運算時間
  2. 比較階碼大小並完成對階:使小數點位置對齊,爲加減運算做準備
  3. 尾數求和運算:不論是加法還是減法,都按加法進行操作,方法與定點加減運算完全一樣
  4. 結果規格化
  5. 結果的舍入處理
  6. 結果的溢出判斷

比較階碼大小並完成對階

  • 對階的原則:以較大的階碼爲標準,調整階碼較小的數據(小階向大階看齊)。避免階碼較大的浮點數尾數左移,導致最高有效數位丟失。

具體操作

  • 求階差 △E = ExEx - EyEy

  • 調整階碼較小的數據

    • 若 △E > 0,則 尾數 MyMy 右移 △E 位(相當於小數點左移),結果的階碼爲 EyEy + △E。(每右移一位,其階碼加1)
    • 若 △E < 0,則 尾數 MxMx 右移 | △E | 位(相當於小數點左移),結果的階碼爲 ExEx + △E。(每右移一位,其階碼加1)

結果規格化

當尾數運算結果出現下面情況時,需要規格化

  • 符號位與最高數值位相同時,說明尾數的絕對值小於 1/2,應向左規格化(左移尾數,每左移一位,階碼減1)
  • 尾數運算結果溢出時,應向右規格化(右移尾數,每右移一位,階碼加1)

結果的舍入處理

在對階或向右規格化時,尾數要向右移位。這樣,會使加數或結果的尾數會被丟掉,造成一定誤差。因此,要進行舍入處理。

常用兩種舍入處理方法:

  • 方法1:0 舍 1 入法
    • 保留右移時的移出位,若最高位爲1,則尾數加1;否則捨去
    • 特點:精度較高,但需要記錄所有的移出位
  • 方法2:恆置 1 法
    • 若之前步驟有右移操作,則直接將結果的最低位置置 1
    • 特點:精度較低,但應用簡單

結果的溢出判斷

  • 階碼溢出
    • 上溢(結果絕對值太大)——置上溢標誌
    • 下溢(結果絕對值太小)——置機器 0

例題:設 x = 2010×0.110110112010×0.11011011 ,y = 2100×(−0.10101100)2100×(−0.10101100) ,求 x + y

這裏寫圖片描述
這裏寫圖片描述

浮點乘法、除法

設有兩個浮點數 x 和 y,它們分別爲

x = 2Ex2Ex · MxMx
y = 2Ey2Ey · MyMy

其中,ExEx 和 EyEy 分別爲數 x 和 y 的階碼,MxMx 和 MyMy 爲數 x 和 y 的尾數

  • 乘法:x × y = 2Ex+Ey2Ex+Ey × (MxMx · MyMy )
  • 除法:x ÷ y = 2Ex−Ey2Ex−Ey × (MxMx ÷ MyMy )

浮點數乘除運算的步驟

  • 0 操作數檢查
  • 階碼加/減操作
  • 尾數乘/除操作
  • 結果規格化、舍入和溢出處理
發佈了41 篇原創文章 · 獲贊 119 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章