本文内容:定点运算,浮点运算,定点运算器和浮点运算器。

思维导图

在上篇文章中 计算机组成原理:数据与文字的表示方法 ,我们已经知道了数据与文字在计算机中是怎么表示的。在这一篇中,我们将知道数据是如何在计算机中运算的(运算方法),及是如何实现的(运算器)。

本文介绍定点运算和浮点运算及其运算器。定点运算中包括定点加法、减法;定点乘法;定点除法;定点运算器。浮点运算中包括浮点加法、减法;浮点乘法;浮点除法;浮点运算器。

定点运算

定点加法、减法

在上篇文章中 计算机组成原理:数据与文字的表示方法,我们已经介绍了数的补码表示法,负数用补码表示后,就可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。

定点数的加法、减法,实际上就是补码加法、减法。

补码加法

补码加法运算基本公式

  • 定点整数:[x+y]补{[x+y]}_补 = [x]补{[x]}_补 + [y]补{[y]}_补 (mod 2n+12^{n+1})
  • 定点小数:[x+y]补{[x+y]}_补 = [x]补{[x]}_补 + [y]补{[y]}_补 (mod 22)

简单来说,只需将符号位和数值部分一起参与运算,并且将符号位产生的进位丢掉即可

证明:

(1)证明依据:补码的定义

若 定点整数的补码形式为 x = xnx_ {n}xn−1x_ {n-1}xn−2x_ {n-2} …… x1x_ {1}x0x_ {0}(xnx_ {n} 为符号位),则补码表示的定义是:

(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+12^{n+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:已知 x1{x_1}= - 1110,x2{x_2}= + 1101,求:[x1]补{[x_1]}_补,[−x1]补{[-{x_1}]}_补,[x2]补{[x_2]}_补,[−x2]补{[-{x_2}]}_补。

解:

[x1]补{[x_1]}_补 = 1 0010

[−x1]补{[-{x_1}]}_补 = 0 1101+0 0001= 0 1110

[x2]补{[x_2]}_补= 0 1101

[−x2]补{[-{x_2}]}_补 =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- {2^n} < x < 2n−1{2^n}-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 = CfC_f ⊕ Cn−1C_{n-1},其中 CfC_f 为符号位产生的进位, Cn−1C_{n-1} 为最高数值位产生的进位

简单来说,当最高有效位产生进位而符号位无进位时,产生正溢;当最高有效位无进位而符号位有进位时,产生负溢,

可以用异或门实现。

回顾逻辑门符号

基本的二进制加法/减法器

1 位 二进制数据的全加器

  • 三个输入:加数:AiA_i,BiB_i,CiC_i(低位向本位的进位)
  • 两个输出:SiS_i(和),Ci+1C_{i+1}(本位向高位的进位)

1 位 二进制数据的全加器示意图

全加运算的真值表如图所示:

根据真值表推出两个输出的逻辑表达式

方法:将真值表中函数值等于1的变量组合选出来;对于每一个组合,凡取值为1的变量写成原变量,取值为0的变量写成反变量,各变量相乘后得到一个乘积项;最后,把各个组合对应的乘积项相加,进行化简后,就得到了相应的逻辑表达式。

两个输出端的逻辑表达式

SiS_i = Ai¯¯¯¯\overline{A_i}Bi¯¯¯¯\overline{B_i} CiC_i + Ai¯¯¯¯\overline{A_i} BiB_iCi¯¯¯¯\overline{C_i} + AiA_iBi¯¯¯¯\overline{B_i}Ci¯¯¯¯\overline{C_i} + AiA_iBiB_iCiC_i

=AiA_i ⊕ BiB_i ⊕ CiC_i

Ci+1C_{i+1} = Ai¯¯¯¯\overline{A_i}BiB_iCiC_i + AiA_iBi¯¯¯¯\overline{B_i}CiC_i + AiA_iBiB_iCi¯¯¯¯\overline{C_i} + AiA_iBiB_iCiC_i

= AiA_iBiB_i + BiB_iCiC_i + CiC_iAiA_i

= AiA_iBiB_i +(AiA_i ⊕ BiB_i )CiC_i

根据逻辑表达式,可画出全加器逻辑结构,如下图所示:

多位二进制数据加法器

  • 两个 n 位的数据 A = An−1A_{n-1}An−2A_{n-2}….A1A_1A0A_0,B = Bn−1B_{n-1}Bn−2B_{n-2}….B1B_1B0B_0

  • 和 S = Sn−1S_{n-1}Sn−2S_{n-2}….S1S_1S0S_0

  • 采用 进位判别法 判断数据的溢出:V = CnC_n ⊕ Cn−1C_{n-1}

多位二进制数据加法器逻辑图如下所示:

多位二进制数据加法/减法器

  • 将减法转换成加法

    • [A]补[A]_补 - [B]补[B]_补 = [A]补[A]_补 + [−B]补[-B]_补
  • 由 [B]补[B]_补 求 [−B]补[-B]_补
    • [B]补[B]_补 包括符号位各位取反,末位加1
  • 将加减法电路合二为一
    • 使用异或运算。
      当 M=0 时,Bi′{B_i}' = Bi{B_i} ;
      当 M=1时,Bi′{B_i}' = Bi¯¯¯¯\overline{B_i}

加法转减法的异或门:

多位二进制数据加法/减法器逻辑图 如下所示:

多位二进制加法/减法器的输出延迟

  • 假如每位均采用一位全加器并考虑溢出检测,n位行波进位加法器的延迟时间 tat_a 为:

    • tat_a = n * 2T + 9T=(2n+9)T
  • 如果不考虑溢出,则延迟时间ta由Sn-1的输出延迟决定:
    • tat_a = (n-1)* 2T +6T +3T = (2(n-1)+9)T
  • 延迟时间 tat_a
    • 输入稳定后,在最坏情况下加法器得到稳定的输出所需的最长时间。
    • 这个时间越小越好

定点乘法

分析笔算乘法

定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位 由两数的符号位按异或运算得到,而乘积的数值部分 则是两个正数相乘之积。

设 n 位被乘数和乘数用定点整数表示(xf{x}_f , yf{y}_f 为乘数符号):

  • 被乘数:[x]原{[x]}_原 = xf{x}_fxn−1{x}_{n-1}….x1{x}_1x0{x}_0
  • 乘数:[y]原{[y]}_原 = yf{y}_fyn−1{y}_{n-1}….y1{y}_1y0{y}_0
  • 乘积:[z]原{[z]}_原 = (xf{x}_f ⊕ yf{y}_f)+ (xn−1{x}_{n-1}….x1{x}_1x0{x}_0)(yn−1{y}_{n-1}….y1{y}_1y0{y}_0)

乘积符号的运算法则 是:同号相乘为正,异号相乘为负。积的符号可按“异或”运算得到。

即:异或运算,异号为1,则为负数;同号为0,则为正数。

例子

特点

  • 符号位单独处理
  • 乘数的某一位决定是否加被乘数
  • 位积相加
  • 乘积的位数扩大一倍

原码并行乘法

不带符号的阵列乘法器 (即 两个无符号数据的并行乘法电路)

设有两个不带符号的二进制整数:

  • A = am−1{a}_{m-1}….a1{a}_1a0{a}_0

  • B = bn−1{b}_{n-1}….b1{b}_1b0{b}_0

它们的真值分别为 a 和 b,即

  • a = ∑m−1i=0ai2i\sum_{i=0}^{m-1}{a_i}{2^i}

  • b = ∑n−1j=0nj2j\sum_{j=0}^{n-1}{n_j}{2^j}

在二进制乘法中,被乘数 A 与乘数 B 相乘,产生 m+n 位乘积 P:

P = pm+n−1{p}_{m+n-1}….p1{p}_1p0{p}_0

乘积 P 的真值为:

P = ab = (∑m−1i=0ai2i\sum_{i=0}^{m-1}{a_i}{2^i})(∑n−1j=0nj2j\sum_{j=0}^{n-1}{n_j}{2^j})
= ∑m−1i=0∑n−1j=0(aibj)2i+j\sum_{i=0}^{m-1} \sum_{j=0}^{n-1} {({a_i}{b_j})} 2^{i+j}
= ∑m+n−1k=0pk2k\sum_{k=0}^{m+n-1}{p_k}{2^k}

实现这个乘法过程所需要的操作和人们的习惯方法非常类似,二进制乘法的运算过程

上述过程说明了在 m 位 × n 位 不带符号的阵列乘法 中的被加数矩阵。每一个部分乘积项(位积) ai{a}_ibj{b}_j 叫做一个被加数。这 m×n 个被加数 ai{a}_ibj{b}_j 可以用 m×n 个 “与”门并行地产生。如下图上半部分所示。

m×n位不带符号的阵列乘法器逻辑框图

接下来说明,并行阵列乘法器的基本原理。下面以 5×5 位并行阵列乘法器为例,来说明。

首先来看看 5×5 位并行阵列乘法器电路,如下所示

其中 FA 是前面 讲过的一位二进制全加器。FA 的斜线方向为进位输出,竖线方向为和输出,而所有 被加数项 的排列和前述 A×B = P 乘法过程中的被加数矩阵相同。图中用虚线围住的阵列中最后一行构成了一个行波进位加法器。

再通过 5×5 二进制例题讲解。

例题:已知两个不带符号的二进制整数A=11011,B=10101,求每一部分乘积项 ai{a}_ibj{b}_j 的值与 p9{p}_{9}p8{p}_8….p0{p}_0 的值

带符号的阵列乘法器 (即 间接补码乘法电路)

在介绍带符号的阵列乘法器基本原理前,我们先来看看算术运算部件设计中经常用到的求补电路——对2求补器(即对模为2的数进行求补操作——二进制)。

下图示出了一个具有使能控制的二进制对2求补器的电路图

其逻辑表达式如下

C−1{C}_{-1} = 0,Ci{C}_{i} = ai{a}_{i} + Ci−1{C}_{i-1}

ai∗{{a}_{i}}^* = ai{a}_{i} ⊕ E ECi−1{C}_{i-1}

特点:

  • 采用 按位扫描技术 来执行求补操作
  • E 为控制信号,由 数据的符号位来控制

对2求补电路的原理

对2求补时,采用按位扫描技术来执行所需要的求补操作。令 A = an{a}_{n}…a1{a}_{1}a0{a}_{0} 是给定的 n+1 位带符号的数,要求确定它的补码形式。进行求补的方法 就是从数的最右端 a0{a}_{0} 开始,由右向左,直到找出第一个“1”例如 ai{a}_{i} = 1,这样 ai{a}_{i} 以右的每一位,包括 ai{a}_{i} 自己,都保持不变,而 ai{a}_{i} 以左 的每一位都求反,即 1变0,0变1。基于此,横向链式电路中的 第 i 扫描级的输出 Ci{C}_{i} 为 1 的条件是:第 i 级的输入位 ai{a}_{i} = 1,或者第 i 级链式输入 Ci−1{C}_{i-1} = 1.另外,最右端的起始链式输入 C−1{C}_{-1} 必须永远置 0。当 控制信号 E 为 1 时(即该数的符号位为1,即负数时),启动对2求补的操作;当 控制信号 E 为 0 时(正数)时,输入和输出相等。

例题

例如,在一个 4位的对2求补器中,如果数为:1 0110。

那么,符号位 1 作为控制信号,进行对2求补操作,输入是 0110,输出将是 1010。

(注意,由此我们可以看出,对2求补电路 的功能是求二进制数的补码,但是输出时,只有数据位,不包含符号位。

现在我们来讨论带符号的阵列乘法器。下图示出了(n+1)位 × (n+1)位带求补器的阵列乘法器逻辑方框图:

设 A = an{a}_{n}an−1{a}_{n-1}…a1{a}_{1}a0{a}_{0} 和 B = bn{b}_{n}bn−1{b}_{n-1}…b1{b}_{1}b0{b}_{0} 均为用定点表示的(n+1)位带符号整数。由上图可以看到,在进行完必要的求补操作以后,A 和 B 的数值位传送给 n位 × n位 不带符号的阵列乘法器,并由此产生 2n 位乘积为

  • A × B = P = p2n−1{p}_{2n-1}…p1{p}_{1}p0{p}_{0}
  • p2n−1{p}_{2n-1} = an{a}_{n} ⊕ bn{b}_{n}

其中,p2n−1{p}_{2n-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]_补 = an{a}_{n}an−1{a}_{n-1}…a1{a}_{1}a0{a}_{0},其中 an{a}_{n} 为符号位。根据 [N]补[N]_补 的符号,补码数 [N]补[N]_补 和 真值 N 的关系可以表示为

若把负权因数 −2n-{2}^{n} 强加到符号位 an{a}_{n} 上,那么就可以把上述方程组中的两个位值表达式合并成下面的统一形式

例题:已知 [N]补[N]_补 = 01101,[−N]补[-N]_补 = 10011,求 [N]补[N]_补 和 [−N]补[-N]_补 具有的数值。

一般化的全加器格式

通过把正权或负权加到输入/输出端,可以归纳出四类加法单元。

直接补码阵列乘法器

利用混合型的全加器就可以构成直接补码阵列乘法器。设被乘数 A 和乘数 B 是两个 5 位的二进制补码,即

  • A = (a4{a}_{4})a3{a}_{3}a2{a}_{2}a1{a}_{1}a0{a}_{0}
  • B = (b4{b}_{4})b3{b}_{3}b2{b}_{2}b1{b}_{1}b0{b}_{0}

它们具有带负权的符号位 a4{a}_{4} 和 b4{b}_{4},并用括号标注。如果我们用括号来标注负的被加项,例(ai{a}_{i}bj{b}_{j}),那么 A 和 B 相乘过程中所包括的操作步骤如下面矩阵所示:

5 位 × 5 位 的直接补码阵列乘法器逻辑原理如下图所示

例题:设 [A]补[A]_补 = (01101)2{(0 1101)}_2,[B]补[B]_补 = (11011)2{(1 1011)}_2,求 [A×B]补[A×B]_补 = ?

定点运算器

逻辑运算

四种基本的逻辑运算

  • 逻辑非:也称求反,按位求它的反
  • 逻辑加:按位求他们的“或”,用“ + ”来表示
  • 逻辑乘:按位求他们的“与”,用 “ · ”来表示
  • 逻辑异:用 “ ⊕ ”来表示

多功能算术/逻辑运算单元(ALU)

在 本文定点加法、减法 中,我们已经知道 一位全加器(FA)的逻辑表达式为

FiF_i = AiA_i ⊕ BiB_i ⊕ CiC_i

Ci+1C_{i+1} = AiA_iBiB_i +(AiA_i ⊕ BiB_i )CiC_i

(FiF_i 是第 i 位的和,AiA_i 和 BiB_i 是第 i 位的被加数和加数,CiC_i 是第 i 位的进位输入,Ci+1C_{i+1} 是第 i 位的进位输出)

ALU 设计思想:

  • AiA_i 和 BiB_i 参与运算之前,先转换为组合函数 XiX_i 和 YiY_i 的形式;
  • 该转换过程由参数 S0S_0,S1S_1,S2S_2,S3S_3 控制
  • 再将 XiX_i 和 YiY_i 和 下一位进位数 通过全加器进行计算

ALU 逻辑结构原理框图:

因此,一位算术/逻辑运算单元的逻辑表达式为:

FiF_i = XiX_i ⊕ YiY_i ⊕ Cn+iC_{n+i}

Cn+i+1C_{n+i+1} = XiX_iYiY_i + YiY_iCn+iC_{n+i} + Cn+iC_{n+i}XiX_i

XiX_iYiY_i 与控制参数和输入量的关系

74181ALU 算术/逻辑运算功能表

  • 控制端

    • S0S_0,S1S_1,S2S_2,S3S_3:控制 ALU 的运算方式
    • M:控制 ALU 的运算类型——算术运算还是逻辑运算
  • 算术运算与逻辑运算的差别:是否考虑进位
    • 算术运算:每一位都需要考虑前一位的进位状态
    • 逻辑运算:每一位运算都是独立进行的,不考虑进位
  • 74181 ALU 芯片有正逻辑、负逻辑之分
    • 正逻辑:1 表示高电平,0 表示低电平
    • 负逻辑:0 表示高电平,1 表示低电平

内部总线

  • 根据总线所在位置分

    • 内部总线:CPU 内部各部件的连线
    • 外部总线:指系统总线,即 CPU 与存储器、I/O 系统之间的连线
  • 按总线的逻辑结构分
    • 单向总线:信息只能向一个方向传送
    • 双向总线:信息可以分两个方向传送,既可以发送数据,也可以接受数据

定点运算器的基本结构

  • 单总线结构的运算器

    • 同一时间内,只能有一个操作数放在单总线上
    • 缺点:操作速度较慢
    • 优点:控制电路比较简单
  • 双总线结构的运算器
    • 两个操作数同时加到 ALU 进行运算
  • 三总线结构的运算器
    • ALU 的两个输入端分别由两条总线供给
    • ALU 的输出则与第三条总线相连

浮点运算

浮点加法、减法

设有两个浮点数 x 和 y,它们分别为

x = 2Ex2^{E_x} · MxM_{x}
y = 2Ey2^{E_y} · MyM_{y}

其中,ExE_{x} 和 EyE_{y} 分别为数 x 和 y 的阶码,MxM_{x} 和 MyM_{y} 为数 x 和 y 的尾数

两浮点数进行加法和减法的运算规则是

z = x ± y = (MxM_{x}2Ex−Ey2^{{E_x}-{E_y}} ± MyM_{y})2Ey2^{E_y} ,ExE_{x} <= EyE_{y}

浮点数加减运算的步骤

  1. 0 操作数检查:一个操作数为 0,则不必运算,节省运算时间
  2. 比较阶码大小并完成对阶:使小数点位置对齐,为加减运算做准备
  3. 尾数求和运算:不论是加法还是减法,都按加法进行操作,方法与定点加减运算完全一样
  4. 结果规格化
  5. 结果的舍入处理
  6. 结果的溢出判断

比较阶码大小并完成对阶

  • 对阶的原则:以较大的阶码为标准,调整阶码较小的数据(小阶向大阶看齐)。避免阶码较大的浮点数尾数左移,导致最高有效数位丢失。

具体操作

  • 求阶差 △E = ExE_{x} - EyE_{y}

  • 调整阶码较小的数据

    • 若 △E > 0,则 尾数 MyM_{y} 右移 △E 位(相当于小数点左移),结果的阶码为 EyE_{y} + △E。(每右移一位,其阶码加1)
    • 若 △E < 0,则 尾数 MxM_{x} 右移 | △E | 位(相当于小数点左移),结果的阶码为 ExE_{x} + △E。(每右移一位,其阶码加1)

结果规格化

当尾数运算结果出现下面情况时,需要规格化

  • 符号位与最高数值位相同时,说明尾数的绝对值小于 1/2,应向左规格化(左移尾数,每左移一位,阶码减1)
  • 尾数运算结果溢出时,应向右规格化(右移尾数,每右移一位,阶码加1)

结果的舍入处理

在对阶或向右规格化时,尾数要向右移位。这样,会使加数或结果的尾数会被丢掉,造成一定误差。因此,要进行舍入处理。

常用两种舍入处理方法:

  • 方法1:0 舍 1 入法

    • 保留右移时的移出位,若最高位为1,则尾数加1;否则舍去
    • 特点:精度较高,但需要记录所有的移出位
  • 方法2:恒置 1 法
    • 若之前步骤有右移操作,则直接将结果的最低位置置 1
    • 特点:精度较低,但应用简单

结果的溢出判断

  • 阶码溢出

    • 上溢(结果绝对值太大)——置上溢标志
    • 下溢(结果绝对值太小)——置机器 0

例题:设 x = 2010×0.110110112^{010} × 0.11011011,y = 2100×(−0.10101100)2^{100} × (-0.10101100),求 x + y


浮点乘法、除法

设有两个浮点数 x 和 y,它们分别为

x = 2Ex2^{E_x} · MxM_{x}
y = 2Ey2^{E_y} · MyM_{y}

其中,ExE_{x} 和 EyE_{y} 分别为数 x 和 y 的阶码,MxM_{x} 和 MyM_{y} 为数 x 和 y 的尾数

  • 乘法:x × y = 2Ex+Ey2^{E_x + E_y} × (MxM_{x} · MyM_{y})
  • 除法:x ÷ y = 2Ex−Ey2^{E_x - E_y} × (MxM_{x} ÷ MyM_{y})

浮点数乘除运算的步骤

  • 0 操作数检查
  • 阶码加/减操作
  • 尾数乘/除操作
  • 结果规格化、舍入和溢出处理

计算机组成原理:运算方法和运算器相关推荐

  1. 计算机组成原理--运算方法:加减乘除

    补码加减法 补码加法 公式:[x+y]补=[x]补+[y]补 补码减法: 为了将减法转变为加法,需证明公式: [x-y]补=[x]补+[-y]补 (证明) 为了求得同时[-y]补,需要证明[-y]补= ...

  2. 计算机组成与结构第二章ppt,计算机组成原理(华科版)第二章 运算方法与运算器.ppt...

    文档介绍: 第二章运算方法与运算器 2.1 数据信息的表示方法 2.1.1数值数据的表示 淘在盛纬娃消镶勉桌乡利亚钦沙隐酋谴牲斗丙茸乔泛戊篡汽栽辫滔矮空芥计算机组成原理(华科版)第二章运算方法与运算器 ...

  3. 计算机组成原理(微课版) -- 第三章 -- 运算方法与运算器

    第三章根据书本[计算机组成原理(微课版) ]进行整理 文章目录 第三章 -- 运算方法与运算器 3.2 定点加减法运算 3.2.1 补码加减法运算方法 1. 补码加法 2. 补码减法 3.2.2 溢出 ...

  4. 浮点加法器计算机组成原理,计算机组成原理 第二章运算方法与运算器

    第二章运算方法与运算器 运算方法:指算术(四则)运算和逻辑运算,在运算器的实现方法,而实现这两种运算的硬设备就是算术逻辑部件ALU(Arithmetic and Logic Unit)或称运算器 由于 ...

  5. 计算机组成原理之(2)计算机的运算方法

    计算机组成原理系列 二.计算机的运算方法 2.1数值与编码 2.2运算方法和运算电路 2.3 浮点数表示.计算 二.计算机的运算方法 2.1数值与编码 2.1.1进位计数制及转换 几进制就是逢几进几. ...

  6. 预习计算机组成原理之计算机的运算方法——笔记4

    系列文章目录 第六章--计算机的运算方法 文章目录 系列文章目录 前言 一.无符号数和有符号数 1.1 无符号数 1.2 有符号数 1.2.1 机器数与真值 1.2.2 原码表示法 (考试的时候注意写 ...

  7. 计算机组成原理学习(哈工大视频)第六章 计算机的运算方法

    计算机中数的表示:在计算机中,能够被硬件直接识别和处理 计算机的运算方法 运算器的设计 6.1无符号数和有符号数 6.1.1无符号数 寄存器的位数,反应了无符号数的表示范围:8位的寄存器,表示范围为0 ...

  8. 计算机组成原理知识点总结(第3篇 第6章 计算机的运算方法)

    基于计算机组成原理(第2版)唐朔飞编著 第6章 计算机的运算方法 计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长. 原码表示法: "0"表示+号,"1" ...

  9. 计算机组成原理赖晓铮课后答案,计算机组成原理实验 2.5 运算器 赖晓铮.ppt

    文档介绍: 计算机组成原理实验系列一.总线与寄存器二.进位加法器三.比较器(仲裁器)四.计数器五.运算器六.存储器七.时序发生器八.微程序控制器九.硬布线控制器赖晓铮博士华南理工大学******@sc ...

  10. 计算机的运算方法(中)测试

    第6章 计算机的运算方法(中)测试 1 单选(1分) 为了提高浮点数的表示精度,其尾数必须为规格化数,如果不是规格化数,就要通过修改阶码并同时左移或右移尾数的办法使其变为规格化数.0.00110101 ...

最新文章

  1. 区块链:这项颠覆性技术将如何改变未来
  2. OpenCV条形码识别
  3. C++语言之父 Bjarne Stroustrup 简介
  4. ie手机浏览器_Flash之后是不是该IE浏览器了
  5. 信息学奥赛C++语言:最大数max(x,y,z)
  6. C语言程序设计 认识函数
  7. C++编写Windows服务程序
  8. python环境配置(三)——notepad ++配置python开发环境
  9. 数据中心里的布线槽设计学问
  10. OC_内存管理(二)对象复制、循环引用问题、自动释放池
  11. websocket传输数据大小限制_WebSocket传输超过126字节数据的方法
  12. 云原生小课堂 | Envoy请求流程源码解析(一):流量劫持
  13. Android 开发 DNK开发将.c文件打包成os
  14. guzzlehttp5.3 and guzzlehttp6.7 , 同时共存。同时安装2个版本guzzlehttp
  15. 幂指函数的极限运算法则
  16. 分享几个内网穿透工具
  17. 邮件撤回成功后对方还能看到吗?163邮箱能群发邮件吗?
  18. 纪中GMOJ语言模块题目1009
  19. com.netflix.hystrix.exception.HystrixRuntimeException short-circuited and no fallback available
  20. 基础四:波片与圆偏振

热门文章

  1. python基础语法实验目的_Python基础语法
  2. MongoDB年终大会转移至线上进行 | 周五参会指南
  3. AI绘画 Midjourney
  4. Git之新建分支命令
  5. HVV-Learning-区域边界网络下的攻击链路与攻击事件(BLAUKC)
  6. String StringBuilder StringBuffer 包装类 Date 类 枚举类
  7. mrctf2020_easy_equation
  8. 数据代码分享|Python用NLP自然语言处理LSTM神经网络Twitter推特灾难文本数据、词云可视化与SVM,KNN,多层感知器,朴素贝叶斯,随机森林,GBDT对比
  9. PAT1001 卡拉兹猜想
  10. VALSE 2020线上大会学生论坛【VALSE Student Seminar】Panel实录