《深入理解计算机系统(原书第2版)》第2章信息的表示和处理
练习题2.52 考虑下列基于IEEE浮点格式的7位浮点表示。两个格式都没有符号位——它们只能表示非负的数字。
1.格式A
有k=3个阶码位。阶码的偏置值是3。
有n=4个小数位。
2.格式B
有k=4个阶码位。阶码的偏置值是7。
有n=3个小数位。
下面给出了一些格式A表示的位模式,你的任务是将它们转换成格式B中最接近的值。如果需要,请使用舍入到偶数的舍入原则。另外,给出由格式A和格式B表示的位模式对应的数字的值。给出整数(例如17)或者小数(例如17/64)。
101 1110的转换
位101 1110对应的数字的值为15/2,这个很简单,就不赘述了。这里讲一下怎么将15/2转为格式B。
在这道习题之前,P74页已经有一个将整数值转换成浮点形式的实例了:
在图2-14中我们看到12 345具有二进制表示[11000000111001]。通过将二进制小数点左移13位,我们创建这个数的一个规格化表示,得到12345 = 1.10000001110012×2^13。为了用IEEE单精度形式来编码,我们丢弃开头的1,并且在末尾增加10个0,来构造小数字段,得到二进制表示 [10000001110010000000000]。为了构造阶码字段,我们用13加上偏置量127,得到140,其二进制表示为[10001100]。加上符号位0,我们就得到二进制的浮点表示[01000110010000001110010000000000]。
参考以上转换流程,对101 1110处理如下:
- 15具有二进制表示[1111]
- 15/2的二进制表示[111.1]
- 将二进制小数点左移2位,得到1.111x2^2
- 丢弃开头的1,构造小数字段,得到二进制表示[111]
- 构造阶码字段,用2加上偏置量7,得到9,其二进制表示为[1001]
- 最后得到格式B的浮点表示:[1001 111]
010 1001的转换
010 1001的值为25/32,同样的流程处理:
- 25具有二进制表示[11001]
- 25/32的二进制表示1.1001x2^-1
- 由于格式B只能表示3个小数位,舍入到偶数得到1.100x2^-1
- 丢弃开头的1,构造小数字段,得到二进制表示[100]
- 构造阶码字段,用-1加上偏置量7,得到6,其二进制表示为[0110]
- 最后得到格式B的浮点表示:[0110 100]
110 1111的转换
110 1111的值为31/2,流程如下:
- 31具有二进制表示[11111]
- 31/2的二进制表示1.1111x2^3
- 由于格式B只能表示3个小数位,1.11110做舍入到偶数为1.000x2
- 31/2的舍入后表示为1.000x2^4
- 丢弃开头的1,构造小数字段,得到二进制表示[000]
- 构造阶码字段,用4加上偏置量7,得到11,其二进制表示为[1011]
- 最后得到格式B的浮点表示:[1011 000]
000 0001的转换
000 0001的值为1/64
- 1/64具有二进制表示1.000x2^-6
- 丢弃开头的1,构造小数字段,得到二进制表示[000]
- 构造阶码字段,用-6加上偏置量7,得到1,其二进制表示为[0001]
- 最后得到格式B的浮点表示:[0001 000]