Life

Tuesday, June 16, 2020

浮点数加减法运算

设有两个浮点数x和y,它们分别为

其中ExEy分别维数x和y的阶码MxMy为数x和y的尾数.

两浮点数进行加法和减法的运算规则是:

完成浮点加减运算的操作过程大体分为四步:

Ⅰ.0操作数检查

如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作,以节省运算时间。

Ⅱ.比较阶码大小并完成对阶

两浮点数进行加减,首先看两数的阶码是否相同,即小数点位置是否对齐。若阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程称为对阶

对阶时,通过尾数的移动以改变Ex或 Ey,使之相等。对阶操作规定尾数右移,使阶码相应增加。显然,一个增加后的阶码与另一个阶码相等,所增加的阶码一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移),右移一位,阶码加1,直到两数阶码相等。

Ⅲ.尾数进行加或减运算

对阶完成后,即可进行尾数的求和运算,不论是加法运算还是减法运算,都按加法进行操作。

Ⅳ.结果规格化并进行舍入处理

尾数求和的结果可以得到01.····或10.····,破坏了规格化,此时需将尾数运算结果右移或左移以实现规格化表示,称为向右规格化向左规格化

在对阶或向右规格化时,尾数向右移位,被右移的尾数的低位部分会被丢掉,因此要进行舍入处理

就近舍入 将结果舍入为最接近且可以表示的值,实质就是通常所说的“四舍无入”。

朝0舍入  结果朝0方向舍入,也就是简单的截尾。

朝+∞舍入 对正数,多余位不全为0则向最低有效位进1;对负数,则截尾。

朝-∞舍入  与朝+∞舍入相反。


溢出处理

浮点数的加减运算过程中会产生尾数溢出和阶码溢出。尾数溢出分为尾数上溢尾数下溢,尾数上溢可通过尾数右移,阶码加1重新对齐;尾数下溢进行舍入处理。因此可以说,浮点数的溢出是以其阶码溢出表现出来的。

阶码溢出分为阶码上溢与阶码下溢。

阶码上溢 超过了阶码可能表示的最大值的正指数值。

阶码下溢 超过了阶码可能表示的最小值的负指数值。

举例说明:

设x=0.5₁₀ ,y=-0.4375₁₀ ,假设尾数有效位4位,用二进制形式求(x+y)

解:

第一步:对阶,y阶小,调整y的指数向x阶看齐

第二步:尾数相加

第三步:规格化

第四步:检查上溢或下溢

    指数采用移码,127≥ -4 ≥ -126,结果无上溢亦无下溢。

第五步:舍入操作

尾数有效位刚好是4位,无需舍入。

最后结果:

十进制验证:

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Leslie Tien和本文原始地址:
https://leslietien.blogspot.com/2020/06/blog-post.html

No comments:

Post a Comment