《浮点数的加减运算一般由以下五个步骤完成》由会员分享,可在线阅读,更多相关《浮点数的加减运算一般由以下五个步骤完成(4页珍藏版)》请在金锄头文库上搜索。
1、浮点数的加减运算一般由以下五个步骤完成: 对阶 尾数运算 结果规格化 舍入处理 溢出判断 设两浮点数 X、Y 进行加减运算,其中 XM x2Ex, YM y2Ey 1. 对阶 所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行 Mx2Ex 与 My2Ey 加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值作为公因数提出来,然后进行尾数的加减运算。 对阶的具体方法是:首先求出两浮点数阶码的差,即EE x-Ey,将小阶码加上E,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移相应位数,以保证该浮点数的值不变。几点注意:
2、 (1)对阶的原则是小阶对大阶,之所以这样做是因为若大阶对小阶,则尾数的数值部分的高位需移出,而小阶对大阶移出的是尾数的数值部分的低位,这样损失的精度更小。 (2)若 E 0,说明两浮点数的阶码已经相同,无需再做对阶操作了。 (3)采用补码表示的尾数右移时,符号位保持不变。 (4)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,可先保留若干移出的位,供以后舍入处理用。 2. 尾数运算 尾数运算就是进行完成对阶后的尾数相加减。这里采用的就是我们前面讲过的纯小数的定点数加减运算。 3. 结果规格化 在机器中,为保证浮点数表示的唯一性,浮点数在机器中都是以规格化形式存储的。对于 IEEE
3、754 标准的浮点数来说,就是尾数必须是 1.M 的形式。由于在进行上述两个定点小数的尾数相加减运算后,尾数有可能是非规格化形式,为此必须进行规格化操作。 规格化操作包括左规和右规两种情况。 左规操作:将尾数左移,同时阶码减值,直至尾数成为 1.M 的形式。例如,浮点数 0.001125 是非规格化的形式,需进行左规操作,将其尾数左移 3 位,同时阶码减 3,就变成 1.110022 规格化形式了。 右规操作:将尾数右移 1 位,同时阶码增 1,便成为规格化的形式了。要注意的是,右规操作只需将尾数右移一位即可,这种情况出现在尾数的最高位(小数点前一位)运算时出现了进位,使尾数成为 10.xxx
4、x 或 11.xxxx 的形式。例如,10.00112 5 右规一位后便成为 1.0001126 的规格化形式了。 4. 舍入处理 浮点运算在对阶或右规时,尾数需要右移,被右移出去的位会被丢掉,从而造成运算结果精度的损失。为了减少这种精度损失,可以将一定位数的移出位先保留起来,称为保护位,在规格化后用于舍入处理。 IEEE754 标准列出了四种可选的舍入处理方法: (1)就近舍入(round to nearest) 这是标准列出的默认舍入方式,其含义相当于我们日常所说的“四舍五入” 。例如,对于 32 位单精度浮点数来说,若超出可保存的 23 位的多余位大于等于 10001,则多余位的值超过了
5、最低可表示位值的一半,这种情况下,舍入的方法是在尾数的最低有效位上加 1;若多余位小于等于 01111,则直接舍去;若多余位为 10000,此时再判断尾数的最低有效位的值,若为 0 则直接舍去,若为 1 则再加 1。 (2)朝 + 舍入(round toward + ) 对正数来说,只要多余位不为全0,则向尾数最低有效位进 1;对负数来说,则是简单地舍去。 (3)朝 - 舍入(round toward -) 与朝+舍入方法正好相反,对正数来说,只是简单地舍去;对负数来说,只要多余位不为全 0,则向尾数最低有效位进 1。 (4)朝 0 舍入( round toward 0) 即简单地截断舍去,而
6、不管多余位是什么值。这种方法实现简单,但容易形成累积误差,且舍入处理后的值总是向下偏差。 5. 溢出判断 与定点数运算不同的是,浮点数的溢出是以其运算结果的阶码的值是否产生溢出来判断的。若阶码的值超过了阶码所能表示的最大正数,则为上溢,进一步,若此时浮点数为正数,则为正上溢,记为+,若浮点数为负数,则为负上溢,记为-;若阶码的值超过了阶码所能表示的最小负数,则为下溢,进一步,若此时浮点数为正数,则为正下溢,若浮点数为负数,则为负下溢。正下溢和负下溢都作为 0 处理。 要注意的是,浮点数的表示范围和补码表示的定点数的表示范围是有所不同的,定点数的表示范围是连续的,而浮点数的表示范围可能是不连续的
7、。如下图 2-10 示。 【例 2.25】设两浮点数的 IEEE754 标准存储格式分别为 x 0 10000010 01101100000000000000000,y0 10000100 01011101100000000000000,求 x+y,并给出结果的 IEEE754 标准存储格式。 解:对于浮点数 x: 符号位 S0 指数 eE-12710000010-0111111100000011(3) 10 尾数 m1.M1.011011000000000000000001.011011 于是有 (-1) sm2e +1.011011000000000000000002 3 对于浮点数 y:
8、 符号位 S0 指数 eE-12710000100-0111111100000011(5) 10 尾数 m1.M1.010111011000000000000001.010111011 于是有 y (-1)sm2e +1.010111011000000000000002 5 (1)对阶 EE x-Ey3-5-2 x 1.01101100000000000000000230.01011011000000000000000000025 (2)尾数相加 x+y 0.01011011000000000000000000025+1.0101110110000000000000025 1.10111000
9、1000000000000002 5 结果的 IEEE754 标准存储格式为:0 10000100 10111000100000000000000 实现浮点运算的加法器逻辑电路原理框图如图 2-11 所示。 图 2-11 浮点运算加法器 图中,三个寄存器 R0、R1 和 R2 分别存放两个参加运算的浮点数和结果。第一步对阶,首先由E 加法器求出两个浮点数阶码的差值,然后由控制电路控制选择小阶码浮点数的尾数进入右移寄存器进行对阶时的右移,右移结果送入尾数加法器的一个输入端,大阶码浮点数的尾数则直接送入加法器的另一个输入端;第二步尾数相加减;第三步规格化,由尾数加法器产生的结果经规格化部件,一方面送移位寄存器进行尾数移位,另一方面控制选择大阶码进行阶码的增或减操作;第四步由舍入部件对规格化后的尾数进行舍入处理,并将结果送结果寄存器的尾数字段;第五步溢出处理,由溢出判别部件对规格化后的阶码进行溢出判别,若未溢出,则将结果送结果寄存器的阶码部分。