浮点数的加减运算一般由以下五个步骤完成
玛丽莲梦兔
964次浏览
2021年01月19日 21:27
最佳经验
本文由作者推荐
船主与油漆工-英语迷语
浮点数的加减运算一般由以下五个步骤完成:
对阶
↓
尾数运算
↓
结果规格化
↓
舍入处理
↓
溢出判断
设两浮点数
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
: