浮点数加减运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如果一个二进制浮点数的尾数的绝对值小于1并且大于等于0.5,(1> |尾数|> 0.5), 那么这个二进制浮点数就是一个规格化的浮点数。

用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有一个符号位时:规格化的浮点数的尾数是正数时应该是0 . 1 X X X X X X X X X ……的形式

(0表示符号位,X表示0或1中的任意一个数值)

规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X……的形式

(1表示符号位,X表示0或1中的任意一个数值)

用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有两个符号位时:规格化的浮点数的尾数是正数时应该是00 . 1 X X X X X X X X X ……的形式

(00表示符号位,X表示0或1中的任意一个数值)

规格化的浮点数的尾数是负数时应该是11 . 0 X X X X X X X X X……的形式

(11表示符号位,X表示0或1中的任意一个数值)

两个浮点数加减法的计算结果必须规格化,如果不是规格化的数,则要通过修改阶码并同时左移或者右移尾数,使其变为规格化的数。

2010X 0.11011011 , y=2100X - [例]x

0.10101100,浮点数均以补码表示,阶码采用双符号位,尾数采用单符号位。求x+y。

答:

(步骤1)转换成题目中要求的浮点数格式:

浮点数x= 2010X 0.11011011 的阶码是+010,尾数是+0.11011011

浮点数均以补码表示,所以阶码以补码表示,并且阶码采用双符号位,

[x]浮的阶码=00010 (00是两个符号位)

浮点数均以补码表示,所以尾数以补码表示,并且尾数采用单符号位,

[x]浮的尾数=0.11011011 (0是1个符号位)

浮点数y=210°x -0.10101100的阶码是+100,尾数是-0.10101100

浮点数均以补码表示,所以阶码以补码表示,并且阶码采用双符号位,[y]浮的阶码=00100

(00是两个符号位)

浮点数均以补码表示,所以尾数以补码表示,并且尾数采用单符号位,

[y]浮的尾数=1.01010100 (1是1个符号位)

(y=2100x -0.10101100 中10101100先取反变为01010011,再加1 后变为01010100)

[x]浮=00010, 0.11011011;

[y] 浮=00100, 1.01010100;

(步骤2)阶数对齐:

x的阶码是+2 (二进制00010), y的阶码是+4 (二进制00100),阶码小的向阶码大的数对齐,x的阶码向y的阶码对齐。

x的阶码加2,从00010变成00100 ,此时x的阶码与y的阶码相等。

[x]浮尾数0.11011011右移两位(小数点不动,左边添加两个符号位,因为x的尾数是

正数,所以添加的两个符号位是0),

[x]浮尾数变为0.00110110(11)

0.11011011 (右移两位,小数点不动,左边添加两个符号位)

0.00110110(11)

因为x的阶码与y的阶码相等,都是00010,所以把x的尾数与y的尾数相加。

(步骤3)尾数相加

0. 00 1 1 0 1 1 0 (11)

+ 1.0 1 0 1 0 1 0 0

1. 1 0 0 0 1 0 1 0 (11)

因为y的尾数没有对应的位数,所以(11)直接落下来进入结果; x尾数的符号位0与y尾数的符号位1同样参与到加法运算。

(步骤4)判断计算结果是否溢出:

当计算结果的尾数只有一个符号位时,符号位与小数点后第一位相等,则没有溢出;

如果符号位与小数点后第一位不等,则产生溢出。

一旦发生溢出,计算结果的尾数右移一位,同时阶码加一

本题中计算结果的尾数是1. 1 0 0 0 1 0 1 0 (11,其中符号位是1,小数点后第一位是

1 ,二者相等,没有溢出。

(步骤5)判断计算结果是否满足规格化:

时:

用二进制补码表示1个规格化的浮点数,并且规格化的浮点数的尾数只有个符号位

规格化的浮点数的尾数是正数时应该是0 . 1 X X X X X X X X X ……的形式

(0表示符号位,X表示0或1中的任意一个数值)

规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X X X X……的形式

(1表示符号位,X表示0或1中的任意一个数值)

本题中计算结果的尾数是1. 1 0 0 0 1 0 1 0 (11,不满足规格化的浮点数的尾数是负数

时应该是1 . 0XXXXXXXXX……的形式,因此不是规格化的浮点数。

为了规格化,本题中计算结果的尾数是 1. 1 0 0 0 1 0 1 0 (11,左移1位,同时阶码减

一。(只能左移,而且左移1位就可以了)

原来的计算结果

[x+y]浮=00100, 1. 1 0 0 0 1 0 1 0 (11);

规格化后(尾数左移1位,小数点不动,右边添加一个0;同时阶码减一)

[x+y]浮=00011, 1 . 0 0 0 1 0 1 0 1 (10)

尾数1 . 0 0 0 1 0 1 0 1,满足规格化的浮点数的尾数是负数时应该是1 . 0 X X X X X X XXX……的形式,因此是规格化的浮点数。

(步骤6)计算结果舍入处理

就近舍入(0舍1入)法:

类似”四舍五入”丢弃的最高位为1,进1;本题丢弃的是(10),最高位为1,所以向上进

1位

则有

相关文档
最新文档