浮点数的加减运算一般由以下五个步骤完成

玛丽莲梦兔
964次浏览
2021年01月19日 21:27
最佳经验
本文由作者推荐

船主与油漆工-英语迷语

2021年1月19日发(作者:雍泰)
浮点数的加减运算一般由以下五个步骤完成:


对阶





尾数运算





结果规格化





舍入处理





溢出判断



设两浮点数
X

Y
进行加减运算,其中


X

M
x
·
2
Ex

Y
M
y
·
2
Ey



1.
对阶



所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作 。
对阶的目的是为
使两个浮点数的尾数能够进行加减运算。
因为,
当进行M
x
·
2
Ex

M
y
·
2< br>Ey
加减运
算时,
只有使两浮点数的指数值部分相同,
才能将相同的指 数值作为公因数提出
来,然后进行尾数的加减运算。



对阶的具 体方法是:首先求出两浮点数阶码的差,即⊿
E

E
x
-E
y
,将小阶
码加上⊿
E
,使之与大阶码相等,同时将小阶码对应的浮点数的尾 数右移相应位
数,以保证该浮点数的值不变。几点注意:



1< br>)对阶的原则是小阶对大阶,之所以这样做是因为若大阶对小阶,则尾
数的数值部分的高位需移出 ,
而小阶对大阶移出的是尾数的数值部分的低位,

样损失的精度更小。



2
)若⊿
E

0
,说明两浮点数的阶 码已经相同,无需再做对阶操作了。



3
)采用补码表示的尾数右移时,符号位保持不变。



4
)由于尾数右移时是将最低位移出,会损失一定的精度,为减少误差,
可先保留若 干移出的位,供以后舍入处理用。



2.
尾数运算



尾数运算就是进行完成对阶后的尾数相加减。
这里采用的就是我们前面讲 过
的纯小数的定点数加减运算。



3.
结果规格化



在机器中,
为保证浮点数表示的唯一性,
浮点数在机器中都是以规格化形式
存储的。
对于
IEEE754
标准 的浮点数来说,
就是尾数必须是
1.M
的形式。
由于
在进行上述两个 定点小数的尾数相加减运算后,
尾数有可能是非规格化形式,

此必须进行规格化操作 。



规格化操作包括左规和右规两种情况。



左规操作:将尾数左移,同时阶码减值,直至尾数成为
1.M
的形式。例如 ,
浮点数
0.0011·
2
5
是非规格化的形式,需进行左规操作, 将其尾数左移
3
位,
同时阶码减
3
,就变成
1.1100·
2
2
规格化形式了。



右规操作:将尾数右移
1
位,同时阶码增
1
,便成为规格化的形式了。要
注意的是,
右规操作只需将尾数右移一位即可,
这种情况出现在尾数的最高位
(小
数点前一位)
运算时出现了进位,
使尾数成为



的形式。
如,
10.0011·
2
5
右规一位后便成为
1.00011·
2
6
的规格化形式了。



4.
舍入处理



浮点运算在对阶或右规时,
尾数需要右移,
被右移出去的位会被丢掉,
从而
造成运算结果精度的损失。
为了减少这种精度 损失,
可以将一定位数的移出位先
保留起来,称为保护位,在规格化后用于舍入处理。


IEEE754
标准列出了四种可选的舍入处理方法:



1
)就近舍入(
round to nearest


这是标准列出的默认舍入方式,其
含义相当于我们日常所说的

四舍五入
。例如,对于
32
位单精度浮点数来说,
若超出可保存的
23
位的多余位大于等于
100…01

则多余位的值超过了最低可
表示 位值的一半,这种情况下,舍入的方法是在尾数的最低有效位上加
1
;若多
余位小于等 于
011…11
,则直接舍去;若多余位为
100…00
,此时再判断尾数< br>的最低有效位的值,若为
0
则直接舍去,若为
1
则再加
1



2
)朝
+∞
舍入(
round toward +∞


对正数来说,只要多余位不为全
0
,则向尾数最低有效位进
1
;对负数来说,则是简单地舍去。



3
)朝
-

舍入(
round toward -



与朝
+∞
舍入方法正好相反,对正
数来说 ,只是简单地舍去;对负数来说,只要多余位不为全
0
,则向尾数最低有
效位进
1




4
)朝
0
舍入(
round toward 0




即简单地截断舍去,
而不管多余位是什么值。< br>这种方法实现简单,
但容易形
成累积误差,且舍入处理后的值总是向下偏差。



5.
溢出判断



与定点数运算 不同的是,
浮点数的溢出是以其运算结果的阶码的值是否产生
溢出来判断的。
若阶码的 值超过了阶码所能表示的最大正数,
则为上溢,
进一步,
若此时浮点数为正数,则为正 上溢,记为
+∞
,若浮点数为负数,则为负上溢,
记为
-

;若阶码的值超过了阶码所能表示的最小负数,则为下溢,进一步,若
此时浮点数为正数,则为正下溢, 若浮点数为负数,则为负下溢。正下溢和负下
溢都作为
0
处理。


要注意的是,
浮点数的表示范围和补码表示的定点数的表示范围是有所不同的,
定点数
的表示范围是连续的,而浮点数的表示范围可能是不连续的。如下图
2-10
示。




【例
2.25
】设两浮点数的< br>IEEE754
标准存储格式分别为


x

0 10000010

y

0 10000100

,求< br>x+y
,并给出结果的
IEEE754
标准存储
格式。



解:对于浮点数
x


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语


船主与油漆工-英语迷语