您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 计算机组成原理第4章 浮点数运算方法
第4章浮点运算规则浮点加减运算浮点乘除法运算浮点数的表示机器中任何一个浮点数可写成:Mx为浮点数的尾数,一般为绝对值小于1的规格化数(补码表示时允许为-1),机器中可用原码或补码表示。Ex为浮点数的阶码,一般为整数,机器中大多用补码或移码表示。R为浮点数的基数,常用2、8、10或16表示。以下以基数为2进行讨论。310123.0123XxERxMX类似于浮点加减运算设两个浮点数①尾数的加减运算规则与定点数完全相同。②当两浮点数阶码不等时,因两尾数小数点的实际位置不一样,尾数部分无法直接进行加减运算。如:x=0.123×103y=4.56×102=0.456×103xExRMxyEyRMy浮点加减运算的步骤1.对阶,使两数的小数点位置对齐。2.尾数求和,将对阶后的两尾数按定点加减运算规则求和(差)。3.规格化,为增加有效数字的位数,提高运算精度,必须将求和(差)后的尾数规格化。4.舍入,为提高精度,要考虑尾数右移时丢失的数值位。5.判断结果,即判断结果是否溢出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尾数MxEyMy(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.规格化如果采用双符号位的补码,则当M0时,其补码规格化形式为[M]补=00.1××…×当M0时,其补码规格化形式为[M]补=11.0××…×但对M0时,有两种情况需特殊处理。①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位,则它们能表示的补码在数轴上的表示范围如下图。A最小负数2+127×(-1)B最大正数2+127×(1-2-n)a最大负数2-128×(-2-1-2-n)b最小正数2-128×2-1浮点机的溢出与否可由阶码的符号决定。即阶码[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)浮点数加减运算流程图浮点加减法运算1.大型计算机和高档微型机中,浮点加减法运算是由硬件完成的。低档的微型机浮点加减法运算是由软件完成的,但无论用硬件实现或由软件实现加减法运算,基本原理是一致的。2.浮点加减法运算要经过对阶、尾数求和、规格化、舍入和溢出判断五步操作。其中尾数运算与定点加减法运算相同,而对阶、舍入、规格化和溢出判断,则是浮点加减法与定点加减法运算不同的操作。3.在补码浮点运算中,阶码与尾数可以都用补码表示。在硬件实现的运算中,阶符和数符常常采取双符号位,正数数符用00表示,负数数符用11表示。浮点乘除法运算设两浮点数则1.阶码运算2.尾数运算xjxrSxyjyrSyyxyxjjyxjjyxrSSyxrSSyx)(1.阶码运算若阶码用补码运算,乘积的阶码为[jx]补+[jy]补,商的阶码为[jx]补-[jy]补。若阶码用移码运算,则[jx]移=2n+jx-2n≤jx2n(n为整数的位数)[jy]移=2n+jy-2n≤jy2n(n为整数的位数)所以[jx]移+[jy]移=2n+jx+2n+jy=2n+(2n+(jx+jy))=2n+[jx+jy]移可见,直接用移码求阶码和时,其最高位多加了一个2n,要得到移码形式的结果,必须减去2n。由于同一个真值的移码和补码其数值部分完全相同,而符号位正好相反,即[jy]补=2n+1+jy(mod2n+1)因此如果求阶码和可用下式完成:[jx]移+[jy]补=2n+jx+2n+1+jy=2n+[2n+(jx+jy)]=[jx+jy]移(mod2n+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结果+12.尾数运算(1)浮点乘法尾数运算(2)浮点除法尾数运算(1)浮点乘法尾数运算预处理:检测两个尾数中是否有一个为0,若有一个为0,乘积必为0,不再作其他操作;如果两尾数均不为0,则可进行乘法运算。相乘:两个浮点数的尾数相乘可以采用定点小数的任何一种乘法运算来完成。规格化:相乘结果可能要进行左规,左规时调整阶码后如果发生阶下溢,则作机器零处理;如果发生阶上溢,则作溢出处理。尾数截断:尾数相乘会得到一个双倍字长的结果,若限定只取1倍字长,则乘积的若干低位将会丢失。如何处理丢失的各位值,通常有两种办法。截断处理:无条件的丢掉正常尾数最低位之后的全部数值。舍入处理:按浮点加减运算讨论的舍入原则进行舍入处理。(1)浮点乘法尾数运算舍入处理对于原码,采用0舍1入法时,不论其值是正数或负数,“舍”使数的绝对值变小,“入”使数的绝对值变大。对于补码,采用0舍1入法时,若丢失的位不是全0,对正数来说,“舍”、“入”的结果与原码正好相同;对负数来说,“舍”、“入”的结果与原码分析正好相反,即“舍”使绝对值变大,“入”使绝对值变小。为了使原码、补码舍入处理后的结果相同,对负数的补码可采用如下规则进行舍入处理。①当丢失的各位均为0时,不必舍入;②当丢失的各位数中的最高位为0时,且以下各位不全为0;或丢失的各位数中的最高位为1,且以下各位均为0时,则舍去被丢失的各位;③当丢失的各位数中的最高位为1,且以下各位又不全为0时;则在保留尾数的最末位加1修正。舍入操作实例[x]补舍入前舍入后对应的真值1.011100001.011110001.011101011.011111001.0111(不舍不入)1.0111(舍)1.0111(舍)1.1000(入)-0.1001-0.1001-0.1001-0.1000对负数的补码可采用如下规则进行舍入处理。①当丢失的各位均为0时,不必舍入;②当丢失的各位数中的最高位为0时,且以下各位不全为0;或丢失的各位数中的最高位为1,且以下各位均为0时,则舍去被丢失的各位;③当丢失的各位数中的最高位为1,且以下各位又不全为0时;则在保留尾数的最末位加1修正。[x]原舍入前舍入后对应的真值1.100100001.100010001.100010111.100001001.1
本文标题:计算机组成原理第4章 浮点数运算方法
链接地址:https://www.777doc.com/doc-6983275 .html