浮点数加减法运算汇报人:孙亚童计算机五班第5组目录Contents一二四三五六引言尾数求和规格化舍入溢出判断対阶引言目录Contents引言引言目录Contents由于浮点数尾数的小数点均固定在第一位数值位前,所以尾数的加减运算规则与定点数的完全相同。但由于其阶码的大小又直接反映尾数有效值小数点的实际位置,因此当两浮点数阶码不同时,两尾数小数点实际位置不一样,尾数部分无法直接进行加减运算。为此,浮点数加减运算必须按以下几步进行:対阶、尾数求和、规格化、舍入、溢出判断。目录Contents対阶対阶目录Contents対阶対阶的目的是使操作数的小数点对齐,即使两数的价码相同。为此,首先要求出阶差,再按小阶向大阶看齐的原则,使阶小的尾数向右移,每右移一位,阶码加一,直到两数的阶码相同为止。右移的次数正好等于阶差。尾数右移时可能会发生数码丢失,影响精度。举个例子目录Contents対阶两浮点数X=0.1101*201,Y=(-0.1010)*211首先写出X,Y的补码表示。[X]补=00,01;00.1101,[Y]补=00,11;11.0110目录Contents対阶在进行加法前,先対阶,故先求阶差:[EX]补+[-EY]补=00,01+11,01=11,10得△E=-2,表示X的阶码比Y的阶码小,再按小阶向大阶看齐的原则,将X的尾数右移两位,其阶码加2,得[X]补=00,11;00.0011此时,△E=0,対阶完成。目录Contents尾数求和尾数求和目录Contents尾数求和12将対阶后的两个两个尾数按定点加(减)法运算规则进行运算。如上例的两数対阶后得[X]补=00,11;00.0011[Y]补=00,11;11.0110则[MX+MY]补=00.0011+11.0110=11.1001即[X+Y]补=00,11;11.1001目录Contents规格化规格化目录Contents规格化浮点数补码的规格化表示当基值r=2时,尾数M的规格化形式为1/2≤∣M∣﹤1如果采用双符号位的补码,则当M﹥0时,其补码规格化形式为:[M]补=00.1XXXXX……当M<0时,其补码规格化形式为:[M]补=11.0XXXXX……目录Contents规格化规格化形式的特殊情况当尾数的最高位数值位与符号位不同时,即为规格化形式,但对S<0,有两种特殊情况需特殊处理。①M=-1/2,则[M]补=11.10000……0,此时M=-1/2满足1/2≤∣M∣﹤1,但不满足规格化形式[M]补=11.0XXXXX……。为了便于硬件判断,特规定-1/2不是规格化的数(对补码而言)。②M=-1,则[M]补=11.000……0,此时M不满足1/2≤∣M∣﹤1,但因小数补码允许表示-1,故-1视为规格化数。目录Contents规格化两种规格化方法当尾数求和(差)结果不满足规格化形式时,则需规格化,规格化分为左规和又规。(1)左规当尾数出现00.0XXX或11.1XXX时,需左规。左规时尾数左移一位,阶码减1,直到符合规格化形式为止。如上例结果为[X+Y]补=00,11;11.1001尾数的第一数值位与符号位相同,需左规,得[X+Y]补=00,10;11.0010(2)右规当尾数出现01.XXX或10.XXX时,表示尾数溢出,这在定点加减法中是不允许的,但在浮点运算中这不算溢出,可通过右规处理,右规时尾数右移一位,阶码加1.目录Contents舍入舍入目录Contents舍入在対阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度。为此,引入舍入来提高尾数的精度。常用舍入方法有以下两种目录Contents舍入此方法类似于十进制的四舍五入法,即在尾数右移时,被移去的最高数值位为0,则舍去。被移去的最高数值位为1,则在尾数末尾加1.这样做可能使尾数又溢出,此时需要再做一次右规。(1)零舍一入法目录Contents舍入尾数右移时,不论丢掉的最高数值位是一还是零,都使右移后的尾数末位恒置一。这种方法同样有使尾数变大和变小两种可能。(2)恒置一法目录Contents溢出判断溢出判断目录Contents溢出判断与定点加减法一样,浮点加减运算最后一步也需判断溢出。在浮点规格化中已指出,当尾数出现01.XXX或10.XXX时,并不表示溢出,只有将此数右移后,再根据阶码来判断浮点运算结果是否溢出。目录Contents溢出判断若机器数为补码,尾数为规格化形式,并假设阶符取2位,阶码对的数值部分取7位,数符取2位,尾数的数值部分取n位,则它能表示的补码在数轴上的表示范围如下图所示目录Contents溢出判断A最小负数:补码表示为00,1111111;11.000…0,真值为:(-1)*2127a最大负数:补码表示为11,0000000;11.0111…1,真值为:(-1/2-2-n)*2-128b最小正数:补码表示为11,0000000;00.1000…0,真值为:(1/2)*2-128B最大正数:补码表示为:00,1111111;00.111…1,真值为(1-2-n)*2127目录Contents溢出判断图中ab之间的部分对应阶码小于-128,这种情况称为浮点数的下溢,下溢时,浮点数趋近于0,故机器不做溢出处理,仅把它作为机器0.目录Contents溢出判断在AB的外侧,部分阶码大于127,这种情况称为浮点数的上溢。此时浮点数真正溢出,机器需停止运算,做溢出中断处理。一般说浮点溢出,均指上溢。目录Contents溢出判断可见,浮点机的溢出与否可由阶码的符号决定,即阶码[E]补=01,XXX……为上溢,需做溢出判断阶码[E]补=10,XXX……为下溢,按机器零处理。运算实例已知X=2010*0.11011011,Y=2100*(-0.10101100)两数补码表示为[X]补=00,010;00.11011011[Y]补=00,100;11.01010100①対阶目录Contents阶差△E=[EX]补+[-EY]补=00,010+11,100=11,110=-2X阶码小,MX右移两位,阶码EX加2得[X]补=00,100;00.00110110(11)②尾数相加目录Contents[MX]补+[My]补=00.00110110+11.01010100=11,10001010(11)左规,移一位,结果为M=11,00010101(10);阶码减1,得E=00,011③规格化④舍入目录Contents移出的最高数值位为1,按零舍一入法,给所得结果最低位加1,得[MX]补+[My]补=11,00010110阶码E=00,011符号位为00,无溢出。故得最终结果为:[X]补+[Y]补=00,011;11,00010110X+Y=(-11101010)*2011⑤判断溢出感谢聆听汇报人:孙亚童