PPT内容
这是计算机组成原理第4章浮点数运算方法ppt课件下载,主要介绍了浮点数的表示;浮点加减运算;浮点加减运算的步骤;浮点数加减运算流程图;浮点加减法运算;浮点运算所需的硬件配置,欢迎点击下载。
第4章 浮点运算规则 浮点加减运算 浮点乘除法运算 浮点数的表示 机器中任何一个浮点数可写成: Mx为浮点数的尾数,一般为绝对值小于1的规格化数(补码表示时允许为-1),机器中可用原码或补码表示。 Ex为浮点数的阶码,一般为整数,机器中大多用补码或移码表示。 R为浮点数的基数,常用2、8 、10或16表示。以下以基数为2进行讨论。 浮点加减运算 设两个浮点数 尾数的加减运算规则与定点数完全相同。 当两浮点数阶码不等时,因两尾数小数点的实际位置不一样,尾数部分无法直接进行加减运算。如:x=0.123×103 y=4.56×102 = 0.456×103 浮点加减运算的步骤 对阶,使两数的小数点位置对齐。 尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。 规格化,为增加有效数字的位数,提高运算精度,必须将求和(差)后的尾数规格化。 舍入,为提高精度,要考虑尾数右移时丢失的数值位。 判断结果 ,即判断结果是否溢出 1. 对阶 这一步操作是将两个加数的小数点对齐。 小阶向大阶看齐,阶码较小的数,其尾数向右移,每右移一位,阶码加“1”,直到两数阶码相同为止。 尾数右移时可能会发生数码丢失,影响精度。 例:两浮点数 x = 0.1101×201, y = -(0.1010)×211,求x+y。(1)首先写出x、y在计算机中的补码表示。 [x]补=00,01;00.1101,[y]补=00,11;11.0110 阶码EX 尾数Mx Ey My (2)在进行加法前,必须先对阶,故先求阶差: [ΔE]补=[Ex]补-[Ey]补=[Ex]补+[-Ey]补 = 00,01+11,01=11,10 即ΔE=-2,表示x的阶码比y的阶码小,再按小阶向大阶看齐的原则,将x的尾数右移两位,其阶码加2。 得[x]’补=00,11;00.0011(01) 此时,ΔE=0,表示对阶完毕。 2. 尾数求和 将对阶后的两个尾数按定点加(减)运算规则进行运算。 注意:并不考虑溢出——溢出由阶码决定 接上例,两数对阶后得: [x]ˊ补=00,11;00.0011(01) [y]补=00,11;11.0110 则[Mx+My]补=00.0011+11.0110=11.1001(01) 即[x+y]补=00,11;11.1001(01) 3. 规格化 如果采用双符号位的补码,则 当M>0时,其补码规格化形式为 [M]补=00.1××…× 当M<0时,其补码规格化形式为 [M]补=11.0××…× 但对M<0时,有两种情况需特殊处理。 M=-1/2,则[M]补=11.100…0。对于补码而言,它不满足于上面的规格化表示式。为了便于硬件判断,特规定-1/2是规格化的数(对补码而言)。 M=-1,则[M]补=11.000…0。因小数补码允许表示-1,故-1视为规格化的数。 规格化又分左规和右规两种。 左规。当尾数出现00.0××…×或11.1××…×时,需左规。左规时尾数左移一位,阶码减1,直到符合补码规格化表示式为止。 右规。当尾数出现01.××…×或10.××…×时,表示尾数溢出,这在定点加减运算中是不允许的,但在浮点运算中这不算溢出,可通过右规处理。右规时尾数右移一位,阶码加1。 接上例,求和结果为[x+y]补=00,11;11.1001(01) 尾数的第一数值位与符号位相同,需左规,即将其左移一位,同时阶码减1,得[x+y]补=00,10;(1)11.0010(1)。 4. 舍入 在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度,为此可用舍入法来提高尾数的精度。 进行舍入时应满足两个要求 首先,对每一次运算的结果而言,要保证误差不超过给定的范围。比如,设机器尾数长39位,要求每次运算误差不超过末位(即第39位)的“1”,即小于 2-39。 其次在大量的运算过程中要保证误差的平衡,即在每一次运算时,由于舍入处理,可能使运算结果增大了,也可能减少了。但总的说来,增加和减少的机会必需是均等的,否则会产生很大的积累误差。 4. 舍入—常用的舍入方法 “0舍1入”法:“0舍1入”法类似于十进制运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能使尾数又溢出,此时需再做一次右规。 特点:最大误差是最低位上的-1/2到接近于1/2之间,正误差可以和负误差抵消。属于比较理想的方法,但实现起来比较复杂。 如上例: [x+y]补=00,10;(1)11.0010(1) = 00,10;11.0011 “恒置1”法:尾数右移时,不论丢掉的最高数值位是“1”或“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。 特点:误差范围扩大,但正负误差可以相互抵消,实现相对容易。 5. 溢出判断 在浮点规格化中已指出,当尾数之和(差)出现01.××…×或10.××…×时,并不表示溢出,只有将此数右规后,再根据阶码来判断浮点运算结果是否溢出。 若机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码取7位,数符取2位,尾数取n位,则它们能表示的补码在数轴上的表示范围如下图。 浮点机的溢出与否可由阶码的符号决定。即 阶码[E]补=01,××…×为上溢。 阶码[E]补=10,××…×为下溢,按机器零处理。 当阶符为“01”时,需做溢出处理。 下溢时,浮点数值趋于零,故机器不做溢出处理,仅把它作为机器零。 上溢时才是浮点数真正溢出,机器需停止运算,作溢出中断处理。 一般所说的浮点溢出,均是指上溢。 例:设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 ①对阶 [ΔE]补=[Ex]补-[Ey]补=11,011+00,100=11,111 即ΔE=-1,则x的尾数向右移一位,阶码相应加1,即 [x]ˊ补=11,100;11.101100 ②求和 [Mx]ˊ补-[My]补=[Ex]补+[-Ey]补 =11.101100+11.000101 =10.110001 即 [x-y]补=11,100;10.110001 尾数符号位出现“10”,需右规。 (续) : 即 [x-y]补=11,100;10.110001, 尾数符号位出现“10”,需右规。 ③规格化 右规后得 [x-y]补=11,101;(1)1.011000(1) ④舍入处理 采用0舍1入法,其尾数右规时末位丢1,则 [x-y]补=11,101;11.011001 ⑤溢出判断 经舍入处理后阶符为“11”,不溢出,故最终结果: x-y= 2-011×(-0.100111) 浮点数加减运算流程图 浮点加减法运算 大型计算机和高档微型机中,浮点加减法运算是由硬件完成的。低档的微型机浮点加减法运算是由软件完成的,但无论用硬件实现或由软件实现加减法运算,基本原理是一致的。 浮点加减法运算要经过对阶、尾数求和、规格化、舍入和溢出判断五步操作。其中尾数运算与定点加减法运算相同,而对阶、舍入、规格化和溢出判断,则是浮点加减法与定点加减法运算不同的操作。 在补码浮点运算中,阶码与尾数可以都用补码表示。在硬件实现的运算中,阶符和数符常常采取双符号位,正数数符用00表示,负数数符用11表示。 浮点乘除法运算 设两浮点数 则 阶码运算 尾数运算 1. 阶码运算 若阶码用补码运算,乘积的阶码为[jx]补+[jy]补,商的阶码为[jx]补-[jy]补。 若阶码用移码运算,则 [jx]移=2n+ jx -2n≤jx<2n (n为整数的位数) [jy]移=2n+ jy -2n≤jy<2n (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 2n+1) 则直接可得移码形式。 同理,当作除法运算时,商的阶码可用下式完成: [jx]移+[-jy]补 = [jx - jy]移 阶码运算 阶码运算方法:进行移码加减运算时,只需将移码表示的加数或减数的符号位取反(即变为补码),然后进行运算,就可得阶和(或阶差)的移码。 溢出判断:在原有移码符号位的前面(即高位)再增加位符号位,并规定该位恒用“0”表示,而加数或减数的补码的两位符号位则一致。 溢出的条件是运算结果移码的最高符号位为1。此时若低位符号位为0,表示上溢;低位符号位为1,表示下溢。 如果运算结果移码的最高符号位为0,即表明没溢出。此时若低位符号位为1,表明结果为正:低位符号位为0,表示结果为负。 阶码运算 溢出判断举例: 设阶码取三位(不含符号位), 当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,则可进行乘法运算。 相乘:两个浮点数的尾数相乘可以采用定点小数的任何一种乘法运算来完成。 规格化:相乘结果可能要进行左规,左规时调整阶码后如果发生阶下溢,则作机器零处理;如果发生阶上溢,则作溢出处理。 尾数截断:尾数相乘会得到一个双倍字长的结果,若限定只取1倍字长,则乘积的若干低位将会丢失。如何处理丢失的各位值,通常有两种办法。 截断处理:无条件的丢掉正常尾数最低位之后的全部数值。 舍入处理:按浮点加减运算讨论的舍入原则进行舍入处理。 (1)浮点乘法尾数运算 舍入处理 对于原码,采用0舍1入法时,不论其值是正数或负数,“舍”使数的绝对值变小,“入”使数的绝对值变大。 对于补码,采用0舍1入法时,若丢失的位不是全0,对正数来说,“舍”、“入”的结果与原码正好相同;对负数来说,“舍”、“入”的结果与原码分析正好相反,即“舍”使绝对值变大,“入”使绝对值变小。 为了使原码、补码舍入处理后的结果相同,对负数的补码可采用如下规则进行舍入处理。 ①当丢失的各位均为0时,不必舍入; ②当丢失的各位数中的最高位为0时,且以下各位不全为0;或丢失的各位数中的最高位为1,且以下各位均为0时,则舍去被丢失的各位; ③当丢失的各位数中的最高位为1,且以下各位又不全为0时;则在保留尾数的最末位加1修正。 舍入操作实例 浮点乘法运算举例 例:设机器数阶码取3位(不含阶符),尾数取7位(不舍数符),要求阶码用移码运算,尾数用补码运算,最后结果保留1倍字长。 设x=2-101×0.0110011),y=2011×(-0.1110010) 求: x• y。 解:[x]补=11,011;00.0110011 [y]补=00,011;11.0001110 ①阶码运算 [jx]移=00,011, [jy]补=00,011 [jx+jy]移=[jx]移+[jy]补=00,011+00,011=00,110 对应真值-2 浮点乘法运算举例(续) ②尾数相乘(采用Booth算法)其过程如下表所示。 浮点乘法运算举例(续) 即[x•y]补=11,110;11.10100101001010 ③ 规格化。左规后[x•y]补=11,101;11.01001010010100 ④舍入处理。尾数为负,按负数的补码的舍入规则,取1倍字长,丢失的7位为0010100,应“舍”。 故最终的结果为:[x•y]补=11,101;11.0100101 即:xy= 2-011×(-0.1011011) (2)浮点除法尾数运算 步骤: 检测被除数是否为0,若为0,则商为0;再检测除数是否为0,若为0,则商为无穷大,另作处理。若两数均不为0,则可进行除法运算。 两浮点数尾数相除同样可采取定点小数的任何一种除法运算来完成。 对已规格化的尾数,为了防止除法结果溢出,可先比较被除数和除数的绝对值,如果被除数的绝对值大于除数的绝对值,则先将被除数右移一位,其阶码加1,再作尾数相除。此时所得结果必然是规格化的定点小数。 浮点除法尾数运算—例题 例: x=2101×0.1001,y=2011×(-0.1101),按补码浮点运算方法求x/y。 解:[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 ②尾数相除(采用补码除法)。 浮点除法尾数运算—例题(续) ②尾数相除(采用补码除法)。 浮点乘除法运算 两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。 两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。 参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入和溢出判断等操作。规格化时要修改阶码。 浮点运算所需的硬件配置 浮点运算器主要由两个定点运算部件组成: 阶码运算部件:用来完成阶码加、减,以及控制对阶时小阶的尾数右移次数和规格化时对阶码的调整。 尾数运算部件:用来完成尾数的四则运算以及判断尾数是否已规格化。 此外,还需有判断运算结果是否溢出的电路等。 现代计算机可把浮点运算部件做成独立的选件,称为协处理器。 浮点协处理器Inte l80287可与Intel 80286或80386微处理器配合处理浮点数的算术运算和多种函数计算。 也可用编程的办法来完成浮点运算,不过这会影响机器的运算速度。 2 算术逻辑单元 ALU电路、快速进位链 ALU电路 Ai和Bi为输入变量;Ki为控制信号,Ki的不同取值可决定该电路作哪一种算术运算或哪一种逻辑运算;Fi是输出函数。 74181—ALU集成电路芯片 74181是能完成四位二进制代码的算逻运算部件,其外特性如下图所示。 74181—ALU集成电路芯片 29C101芯片 将寄存器和ALU集成导一个芯片内。 快速进位链 问题:随着操作数位数的增加,电路中进位的速度对运算时间的影响也越大。 并行加法器 ——多位加法器 串行进位链 并行进位链 单重分组跳跃进位 即:单级分组 双重分组跳跃进位 快速进位链 问题:随着操作数位数的增加,电路中进位的速度对运算时间的影响也越大。 并行加法器 ——多位加法器 串行进位链 并行进位链 单重分组跳跃进位 即:单级分组 双重分组跳跃进位 半加器(half adder) 全加器(full adder) 其输入不仅有两个1位二进制数相加,还需加上低位送来的进位。 双全加器74LS182的1/2逻辑图 1. 并行(多位)加法器 n+1个全加器级联,就组成了一个n+1位的并行加法器(行波进位加法器)。 并行加法器 分析:由全加器的逻辑表达式可知, Ci进位有两部分组成:本地进位AiBi,可记作di,与低位无关;传递进位(Ai+Bi)Ci-1,与低位有关,称(Ai+Bi)为传递条件,记作ti,则: 由Ci的组成可以将逐级传递进位的结构转换为以进位链的方式实现快速进位。目前进位链通常采用串行和并行两种。 2. 串行进位链 串行进位链是指并行加法器中的进位信号采用串行传递。 以四位并行加法器为例,每一位的进位表达式可示为: 由上式可见,采用与非逻辑电路可方便地实现进位传递,如下图所示。注意:A+B =-( -A * -B) 串行进位链 延迟时间分析: 若设与非门的级延迟时间为ty,那么当di、ti形成后,共需8ty使可产生最高位的进位。 实际上每增加一位全加器,进位时间就会增加2ty。n位全加器的最长进位时间为2nty。 3. 并行进位链 并行进位链是指并行加法器中的进位信号是同时产生的,又称先行进位、跳跃进位等。 超前进位加法器 通常并行进位链有单重分组和双重分组两种实现方案。 理想的并行进位链是n位全加器的n位进位同时产生,但实际实现有困难。 (1)单重分组跳跃进位 单重分组跳跃进位:将M位全加器分成若干小组,小组内的进位同时产生,小组与小组之间采用串行进位。 又称为“组内并行、组间串行”进位。 以四位并行加法器为例,对其进位表示式稍作变换,便可获得并行进位表达式: 四位一组并行进位 对应的逻辑图为: 单重分组跳跃进位 如果将16位的全加器按四位一组分组,便可得单重分组跳跃进位链框图 单重分组跳跃进位 缺点:但随着n的增大,其优势便很快减弱。 例如,n=64,4位分组,共为16组:组间有16位串行进位,在di、ti形成后,还需经16×2.5= 40ty才能产生全部进位,显然进位时间太长。 如果能使组间进位也同时产生,必然会更大地提高进位速度,这就是组内、组间均为并行进位的方案。 (2)双重分组跳跃进位 双重分组跳跃进位原理: 将n位全加器分成几个大组 每个大组又包含几个小组 每个大组内所包含的各个小组的最高位进位是同时形成的,大组与大组间采用串行进位。 各小组最高位进位是同时形成的,小组内的其他进位也是同时形成的 故又有“组内并行、组间并行”之称 注意:两小组内的其他进位与小组的最高位进位并不是同时产生的,。 双重分组跳跃进位 32位并行加法器双重分组跳跃进位链的框图 双重分组跳跃进位 32位并行加法器双重分组跳跃进位链的框图 双重分组跳跃进位 32位并行加法器双重分组跳跃进位链的框图 双重分组跳跃进位 进一步展开又得: 双重分组跳跃进位 Di和Ti它们都是由小组产生的,按其逻辑表达式可画出相应的电路如下图所示。 双重分组跳跃进位 由大组跳跃进位链和小组跳跃进位链的线路可构成16位加法器的双重分组跳跃进位链框图。 双重分组跳跃进位 32位并行加法器双重分组跳跃进位链的框图 进位方案选择和实例 机器究竟采用哪种方案,每个小组内应包含几位,应根据运算速度指标及所选元件等诸方面团素综合考虑。 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 输出:演示运算每个步骤的流程图。