1、6.4 浮点四则运算,浮点加减运算 浮点乘除法运算,浮点数的形式回顾,任何一个实数都可以用浮点数形式来表示:x为浮点数的尾数,一般为绝对值小于1的规格化数(补码表示时允许为-1),机器中可用原码或补码表示。 jx为浮点数的阶码,一般为整数,机器中大多用补码或移码表示。 r为浮点数的基数,以下以基数为2进行讨论。,浮点加减运算,设两个浮点数 尾数的加减运算规则与定点数完全相同。 当两浮点数阶码不等时,因两尾数小数点的实际位置不一样,尾数部分无法直接进行加减运算。,浮点加减运算的步骤,对阶,使两数的小数点位置对齐。尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。规格化,为增加有效数字的位数
2、,提高运算精度,必须将求和(差)后的尾数规格化。舍入,为提高精度,要考虑尾数右移时丢失的数值位。判断结果 ,即判断结果是否溢出,1. 对阶,这一步操作是将两个加数的小数点对齐。 求阶差j。小阶向大阶看齐,阶码较小的数,其尾数向右移。每右移一位,阶码加“1”,直到两数阶码相同为止。 尾数右移时可能会发生数码丢失,影响精度。,例,,两浮点数x0.1101201,y=(-0.1010)211,求x+y。 (1)首先写出x、y在计算机中的补码表示。x补=00,01;00.1101,y补=00,11;11.0110(2)在进行加法前,必须先对阶,故先求阶差:j补=jx补-jy补=00,01+11,01=
3、11,10即j=-2,表示x的阶码比y的阶码小,再按小阶向大阶看齐的原则,将x的尾数右移两位,其阶码加2。得x补=00,11;00,0011此时,j=0,表示对阶完毕。,2. 尾数求和,将对阶后的两个尾数按定点加(减)运算规则进行运算。 注意:并不考虑溢出溢出由阶码决定接上例,两数对阶后得浮点机机器数:x 补=00,11;00.0011y补=00,11;11.0110 则尾数Sx补+ Sy补 =00.0011+11.0110=11.1001即尾数相加后的机器数:x+y补=00,11;11.1001,3. 规格化,尾数S的规格化是指尾数满足条件:如果采用双符号位的补码,则当S0时,其补码规格化形
4、式为S补=00.1 当S0时,其补码规格化形式为S补=11.0 但对S0时,有两种情况需特殊处理。 S=-1/2,则S补=11.1000。对于补码而言,它不满足于上面的规格化表示式。为了便于硬件判断,特规定-1/2是规格化的数(对补码而言)。 S=-1,则S补=11.0000。因小数补码允许表示-1,故-1视为规格化的数。,3. 规格化,规格化又分左规和右规两种。 左规。当尾数出现00.0或11.1时,需左规。左规时尾数左移一位,阶码减1,直到符合补码规格化表示式为止。 右规。当尾数出现01.或10.时,表示尾数溢出,这在定点加减运算中是不允许的,但在浮点运算中这不算溢出,可通过右规处理。右规
5、时尾数右移一位,阶码加1。接上例,求和结果为x+y补=00,11;11.1001尾数的第一数值位与符号位相同,需左规,即将其左移一位,同时阶码减1,得x+y补=00,10;11.0010。,4. 舍入,在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度,为此可用舍入法来提高尾数的精度。 进行舍入时应满足两个要求 首先,对每一次运算的结果而言,要保证误差不超过给定的范围。比如,设机器尾数长39位,要求每次运算误差不超过末位(即第39位)的“1”,即小于 2-39。 其次在大量的运算过程中要保证误差的平衡,即在每一次运算时,由于舍入处理,可能使运算结果增大了,也可能减少了。但总的说来
6、,增加和减少的机会必需是均等的,否则会产生很大的积累误差。,4. 舍入常用的舍入方法,“0舍1入”法:“0舍1入”法类似于十进制运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能使尾数又溢出,此时需再做一次右规。 特点:最大误差是最低位上的-1/2到接近于1/2之间,正误差可以和负误差抵消。属于比较理想的方法,但实现起来比较复杂。“恒置1”法:尾数右移时,不论丢掉的最高数值位是“1”或“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。 特点:误差范围扩大,但正负误差可以相互抵消,实现相对
7、容易。,5. 溢出判断,在浮点规格化中已指出,当尾数之和(差)出现01.或10.时,并不表示溢出,只有将此数右规后,再根据阶码来判断浮点运算结果是否溢出。若机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码取7位,数符取2位,尾数取n位,则它们能表示的补码在数轴上的表示范围如下图。,A最小负数 2+127(-1) B最大正数 2+127(1-2-n) a最大负数 2-128(-2-1-2-n) b最小正数 2-1282-1,5. 溢出判断,浮点机的溢出与否可由阶码的符号决定。即阶码j补=01,为上溢。阶码j补=10,为下溢,按机器零处理。当阶符为“01”时,需做溢出处理。下溢时,浮点数值趋
8、于零,故机器不做溢出处理,仅把它作为机器零。 上溢时才是浮点数真正溢出,机器需停止运算,作溢出中断处理。 一般所说的浮点溢出,均是指上溢。,例:设x=2-101(-0.101000),y=2-100(+0.111011),并假设阶符取2位,阶码取3位,数符取2位,尾数取6位,求x-y。 解:由x=2-101(-0.101000),y=2-100(+0.111011) 得x补=11,011;11.011000,y补=11,100;00.111011对阶j补=jx补-jy补=11,011+00,100=11,111即j=-1,则x的尾数向右移一位,阶码相应加1,即x补=11,100;11.1011
9、00求和Sx补-Sy补=Sx补+-Sy补=11.101100+11.000101=10.110001即 x-y补=11,100;10.110001尾数符号位出现“10”,需右规。,解(续) : 即 x-y补=11,100;10.110001, 尾数符号位出现“10”,需右规。 规格化右规后得 x-y补=11,101;11.0110001舍入处理采用0舍1入法,其尾数右规时末位丢1,则x-y补=11,101;11.011001溢出判断经舍入处理后阶符为“11”,不溢出,故最终结果: x-y= 2-011(-0.100111),浮点数加减运算流程,浮点加减法运算特点,大型计算机和高档微型机中,浮点
10、加减法运算是由硬件完成的。低档的微型机浮点加减法运算是由软件完成的,但无论用硬件实现或由软件实现加减法运算,基本原理是一致的。浮点加减法运算要经过对阶、尾数求和、规格化、舍入和溢出判断五步操作。其中尾数运算与定点加减法运算相同,而对阶、舍入、规格化和溢出判断,则是浮点加减法与定点加减法运算不同的操作。在补码浮点运算中,阶码与尾数可以都用补码表示。在硬件实现的运算中,阶符和数符常常采取双符号位,正数数符用00表示,负数数符用11表示。,浮点乘除法运算,设两浮点数 则 阶码运算 尾数运算,1. 阶码运算,若阶码用补码运算,乘积的阶码为jx补+jy补,商的阶码为jx补-jy补。 若阶码用移码运算,则
11、jx移=2n+ jx -2njx2n (n为整数的位数)jy移=2n+ jy -2njy2n (n为整数的位数) 所以jx移+jy移= 2n+ jx +2n+ jy = 2n+ (2n +( jx + jy)= 2n+jx + jy移 可见,直接用移码求阶码和时,其最高位多加了一个2n,要得到移码形式的结果,必须减去2n。,由于同一个真值的移码和补码其数值部分完全相同,而符号位正好相反,即 jy补=2n+1+ jy (mod 2n+1) 因此如果求阶码和可用下式完成:jx移+jy补= 2n+ jx +2n+1+ jy = 2n+ 2n +( jx + jy) = jx + jy移 (mod 2
12、n+1) 则直接可得移码形式。同理,当作除法运算时,商的阶码可用下式完成:jx移+-jy补 = jx - jy移,阶码运算,阶码运算方法:进行移码加减运算时,只需将移码表示的加数或减数的符号位取反(即变为补码),然后进行运算,就可得阶和(或阶差)的移码。 溢出判断:在原有移码符号位的前面(即高位)再增加位符号位,并规定该位恒用“0”表示,而加数或减数的补码的两位符号位则一致。 溢出的条件是运算结果移码的最高符号位为1。此时若低位符号位为0,表示上溢;低位符号位为1,表示下溢。 如果运算结果移码的最高符号位为0,即表明没溢出。此时若低位符号位为1,表明结果为正:低位符号位为0,表示结果为负。,阶
13、码运算,溢出判断举例: 设阶码取三位(不含符号位),当jx=+101,jy=+110时,有 jx移=01,101, jy补=00,110 则:jx +jy移=jx移+ jy补=01,101+00,110=10,001 结果上溢jx -jy移=jx移+ -jy补=01,101+11,100=01,001 结果+1,2. 尾数运算,(1)浮点乘法尾数运算(2)浮点除法尾数运算,(1)浮点乘法尾数运算,预处理:检测两个尾数中是否有一个为0,若有一个为0,乘积必为0,不再作其他操作;如果两尾数均不为0,则可进行乘法运算。 相乘:两个浮点数的尾数相乘可以采用定点小数的任何一种乘法运算来完成。 规格化:相
14、乘结果可能要进行左规,左规时调整阶码后如果发生阶下溢,则作机器零处理;如果发生阶上溢,则作溢出处理。,尾数截断:尾数相乘会得到一个双倍字长的结果,若限定只取1倍字长,则乘积的若干低位将会丢失。如何处理丢失的各位值,通常有两种办法。 截断处理:无条件的丢掉正常尾数最低位之后的全部数值。 舍入处理:按浮点加减运算讨论的舍入原则进行舍入处理。,(1)浮点乘法尾数运算,舍入处理 对于原码,采用0舍1入法时,不论其值是正数或负数,“舍”使数的绝对值变小,“入”使数的绝对值变大。 对于补码,采用0舍1入法时,若丢失的位不是全0,对正数来说,“舍”、“入”的结果与原码正好相同;对负数来说,“舍”、“入”的结
15、果与原码分析正好相反,即“舍”使绝对值变大,“入”使绝对值变小。 为了使原码、补码舍入处理后的结果相同,对负数的补码可采用如下规则进行舍入处理。 当丢失的各位均为0时,不必舍入; 当丢失的各位数中的最高位为0时,且以下各位不全为0;或丢失的各位数中的最高位为1,且以下各位均为0时,则舍去被丢失的各位; 当丢失的各位数中的最高位为1,且以下各位又不全为0时;则在保留尾数的最末位加1修正。,(1)浮点乘法尾数运算,舍入操作实例,对负数的补码可采用如下规则进行舍入处理。 当丢失的各位均为0时,不必舍入; 当丢失的各位数中的最高位为0时,且以下各位不全为0;或丢失的各位数中的最高位为1,且以下各位均为
16、0时,则舍去被丢失的各位; 当丢失的各位数中的最高位为1,且以下各位又不全为0时;则在保留尾数的最末位加1修正。,浮点乘法运算举例,例:设机器数阶码取3位(不含阶符),尾数取7位(不舍数符),要求阶码用移码运算,尾数用补码运算,最后结果保留1倍字长。 设x=2-1010.0110011),y=2011(-0.1110010) 求: x y。解:x补=11,011;00.0110011y补=00,011;11.0001110阶码运算jx移=00,011, jy补=00,011jx+jy移=jx移+jy补=00,011+00,011=00,110对应真值-2,浮点乘法运算举例(续),尾数相乘(采用
17、Booth算法)其过程如下表所示。,相乘的结果为:SxSy补=11.10100101001010,浮点乘法运算举例(续),即xy补=11,110;11.10100101001010 规格化。左规后xy补=11,101;11.01001010010100 舍入处理。尾数为负,按负数的补码的舍入规则,取1倍字长,丢失的7位为0010100,应“舍”。故最终的结果为:xy补=11,101;11.0100101即:xy= 2-011(-0.1011011),(2)浮点除法尾数运算,步骤: 检测被除数是否为0,若为0,则商为0;再检测除数是否为0,若为0,则商为无穷大,另作处理。若两数均不为0,则可进行
18、除法运算。 两浮点数尾数相除同样可采取定点小数的任何一种除法运算来完成。 对已规格化的尾数,为了防止除法结果溢出,可先比较被除数和除数的绝对值,如果被除数的绝对值大于除数的绝对值,则先将被除数右移一位,其阶码加1,再作尾数相除。此时所得结果必然是规格化的定点小数。,浮点除法尾数运算例题,例: x=21010.1001,y=2011(-0.1101),按补码浮点运算方法求xy。解:x补=00,101;00.1001, y补=00,011;11.0011,-Sy补=00.1101阶码相减。jx补-jy补=00,101-00,011=00,101+11,101=00,010尾数相除(采用补码除法)。
19、,浮点除法尾数运算例题(续),尾数相除(采用补码除法)。,结果为SxSy=1.0101 规格化。尾数相除结果已为规格化数。所以xy补=00,010;11.0101,则xy=2010(-0.1011),浮点乘除法运算,两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入和溢出判断等操作。规格化时要修改阶码。,浮点运算所需的硬件配置,浮点运算器主要由两个定点运算部件组成
20、: 阶码运算部件:用来完成阶码加、减,以及控制对阶时小阶的尾数右移次数和规格化时对阶码的调整。 尾数运算部件:用来完成尾数的四则运算以及判断尾数是否已规格化。 此外,还需有判断运算结果是否溢出的电路等。现代计算机可把浮点运算部件做成独立的选件,称为协处理器。 浮点协处理器Inte l80287可与Intel 80286或80386微处理器配合处理浮点数的算术运算和多种函数计算。也可用编程的办法来完成浮点运算,不过这会影响机器的运算速度。,6.5 算术逻辑单元,ALU电路、快速进位链,ALU电路,Ai和Bi为输入变量;Ki为控制信号,Ki的不同取值可决定该电路作哪一种算术运算或哪一种逻辑运算;F
21、i是输出函数。,74181ALU集成电路芯片,74181是能完成四位二进制代码的算逻运算部件,其外特性如下图所示。,正逻辑工作方式,负逻辑工作方式,正逻辑中,“1”用高电平表示,“0”用低电平表示,而负逻辑刚好相反。正逻辑与负逻辑的关系为:正逻辑的“与”到负逻辑中变为“或”,即”+”、”互换。,74181ALU集成电路芯片,注意:ALU为组合逻辑电路,因此实际应用ALU时,其输入端口A和B必须与锁存器相连,而且在运算的过程中锁存器的内容是不变的。其输出也必须送至寄存器中保存。,29C101芯片,将寄存器和ALU集成到一个芯片内。,快速进位链,问题:随着操作数位数的增加,电路中进位的速度对运算时
22、间的影响也越大。并行加法器 多位加法器 串行进位链 并行进位链 单重分组跳跃进位 即:单级分组 双重分组跳跃进位,半加器(half adder),不考虑进位将两个一位二进制数A和B相加。,全加器(full adder),其输入不仅有两个1位二进制数相加,还需加上低位送来的进位。,双全加器74LS182的1/2逻辑图,1. 并行(多位)加法器,n+1个全加器级联,就组成了一个n+1位的并行加法器(行波进位加法器)。,由于每位全加器的进位输出是高一位全加器的进位输入,因此当全加器有进位时,这种一级一级传递进位的过程,将会大大影响运算速度。,并行加法器,分析:由全加器的逻辑表达式可知,Ci进位有两部
23、分组成:本地进位AiBi,可记作di,与低位无关;传递进位(AiBi)Ci-1,与低位有关,称(AiBi)为传递条件,记作ti,则:由Ci的组成可以将逐级传递进位的结构转换为以进位链的方式实现快速进位。目前进位链通常采用串行和并行两种。,2. 串行进位链,串行进位链是指并行加法器中的进位信号采用串行传递。 以四位并行加法器为例,每一位的进位表达式可示为:由上式可见,采用与非逻辑电路可方便地实现进位传递,如下图所示。注意:A+B =( -A * -B),串行进位链,延迟时间分析: 若设与非门的级延迟时间为ty,那么当di、ti形成后,共需8ty使可产生最高位的进位。 实际上每增加一位全加器,进位
24、时间就会增加2ty。n位全加器的最长进位时间为2nty。,3. 并行进位链,并行进位链是指并行加法器中的进位信号是同时产生的,又称先行进位、跳跃进位等。 超前进位加法器 通常并行进位链有单重分组和双重分组两种实现方案。 理想的并行进位链是n位全加器的n位进位同时产生,但实际实现有困难。,(1)单重分组跳跃进位,单重分组跳跃进位:将M位全加器分成若干小组,小组内的进位同时产生,小组与小组之间采用串行进位。 又称为“组内并行、组间串行”进位。 以四位并行加法器为例,对其进位表示式稍作变换,便可获得并行进位表达式:,四位一组并行进位,对应的逻辑图为:,设与或非门的级延迟时间为1.5ty,与非门的级延
25、迟时间仍为1ty,则di、ti形成后,只需2.5ty就可产生全部进位。,单重分组跳跃进位,如果将16位的全加器按四位一组分组,便可得单重分组跳跃进位链框图,在di、ti形成后,经2.5ty可产生C3、C2、C3、C3四个进位信息,经10ty就可产生全部进位。 如前所示,n=16的串行进位链的全部进位时间为32ty,则16位全加器的单重分组方案进位时间仅约为串行进位链的三分之一。,单重分组跳跃进位,缺点:但随着n的增大,其优势便很快减弱。 例如,n=64,4位分组,共为16组:组间有16位串行进位,在di、ti形成后,还需经162.5 40ty才能产生全部进位,显然进位时间太长。如果能使组间进位
26、也同时产生,必然会更大地提高进位速度,这就是组内、组间均为并行进位的方案。,(2)双重分组跳跃进位,双重分组跳跃进位原理: 将n位全加器分成几个大组 每个大组又包含几个小组 每个大组内所包含的各个小组的最高位进位是同时形成的,大组与大组间采用串行进位。 各小组最高位进位是同时形成的,小组内的其他进位也是同时形成的 故又有“组内并行、组间并行”之称 注意:两小组内的其他进位与小组的最高位进位并不是同时产生的,。,双重分组跳跃进位,32位并行加法器双重分组跳跃进位链的框图,分两大组,每个大组内包含4个小组,第一大组内的4个小组的最高位进位C31、C27、C23、C19是同时产生的;第二大组内4个小
27、组的最高位进位C15、C11、C7、C3也是同时产生的,而第二大组向第一大组的进位C15采用串行进位方式。,双重分组跳跃进位,32位并行加法器双重分组跳跃进位链的框图,以第二大组为例,分析各进位的逻辑关系。,D8与本小组内的di、ti有关,不依赖外来进C-1,故称D8为第八小组的本地进位, T8 是将低位进位C-1传到高位小组的条件,故称T8为第八小组的传送条件。,双重分组跳跃进位,32位并行加法器双重分组跳跃进位链的框图,以第二大组为例,分析各进位的逻辑关系。 同理可写出第五、六、七小组的最高位进位表达式:,双重分组跳跃进位,进一步展开又得:,可得大组跳跃进位链 :,由图可见,当Di、Ti(
28、i=58)及外来进位C-1形成后,再经过2.5ty便可同时产生Cl5、C11,C7、C3。,双重分组跳跃进位,Di和Ti它们都是由小组产生的,按其逻辑表达式可画出相应的电路如下图所示。,每小组可产生本小组的本地进位Di和传送条件Ti以及组内的各低位进位,但不能产生组内最高位进位,即第五组形成D5、T5、C14、C13、C12,不产生C15;第六组形成D6、T6、C10、C9、C8,不产生C11;第七组形成D7、T7、C6、C5、C4,不产生C7;第八组形成D8、T8、C2、C1、C0 ,不产生C3。,双重分组跳跃进位,由大组跳跃进位链和小组跳跃进位链的线路可构成16位加法器的双重分组跳跃进位链
29、框图。,从Di、Ti、及C-1(外来进位)形成后开始后, 经2.5Ty:形成C2、C1、C0和全部Di、Ti; 再经2.5Ty :形成大组内的四个进位Cl5、Cl1、C7、C3; 再经过2.5Ty :形成第五、六、七小组的其余进位Cl4、C13、C12、C10、C9、C8、C6、C5、C4,,可见,按双重分组设计n=16的进位链,最长进位时间为7.5Ty,比单重分组进位链又省了2.5Ty。随着n的增大,双重分组的优越性显得格外突出。,双重分组跳跃进位,32位并行加法器双重分组跳跃进位链的框图,从Di、Ti、及C-1(外来进位)形成后开始后, 经2.5Ty:形成C2、C1、C0和全部Di、Ti;
30、 再经2.5Ty :形成第二大组内的四个进位Cl5、Cl1、C7、C3; 再经过2.5Ty :形成Cl816、 Cl412、C108、C6C4、C31、C27、C23、C19; 再经过2.5Ty :形成C3028、 C2624、C2220。,进位方案选择和实例,机器究竟采用哪种方案,每个小组内应包含几位,应根据运算速度指标及所选元件等诸方面团素综合考虑。74181芯片是4位ALU电路,其四位进位是同时产生的,多片74181级联就犹如本节介绍的单重分组跳跃进位,即组内(74181片内)并行,组间(74181片间)串行。,进位方案选择和实例,74182为先行进位部件,将74181与74182芯片配合,就可组成双重分组跳跃进位链。 两片74182和8片74181组成32位ALU电路。,本章小结,数据的表示方法和转换 无符号数和有符号数 数的定点表示和浮点表示 定点运算 浮点四则运算 算术逻辑单元ALU,作业,第291页294页:4、5、7、9、12、19(1)、19(4)、20(1)、21(1)、24(1)、25(1)、27(1)、28(1)、30(2)。 报告:编写一个完成原码、补码四则运算(定点、浮点)的仿真程序。 输入:x,y 输出:演示运算每个步骤的流程图。,休息是为了走更远的路!,