浮点运算的不精确性能够产生灾难性的后果。1991年2月25日,在第 一次海湾战争期间,沙特阿拉伯的达摩地区设置的美国爱国者导弹,拦截伊拉克的飞 毛腿导弹失败。

深入学习计算机系统练习题

浮点运算的不精确性能够产生灾难性的后果。1991年2月25日,在第 一次海湾战争期间,沙特阿拉伯的达摩地区设置的美国爱国者导弹,拦截伊拉克的飞 毛腿导弹失败。飞毛腿导弹击中了美国的一个兵营,造成28名士兵死亡。美国总审 .计局(GAO)对失败原因做了详细的分析[76],并且确定底层的原因在于一个数字计 _算不精确。在这个练习中,你将重现总审计局分析的一部分。 爱国者导弹系统中含有一个内置的时钟,其实现类似一个计数器,每0.1秒就加1。为了以秒为单位来确定时间,程序将用一个24位的近似于1/10的二进制小数值 来乘以这个计数器的值。特别地,1/10的二进制表达式是一个无穷序列0. 000110011 [0011]…2,其中,方括号里的部分是无限重复的。程序用值x来近似地表示0. 1,x只考虑这个序列的二进制小数点右边的前23位:x = 0. 00011001100110011001100。

A. 0.1-x的二进制表示是什么?

B. 0.1-x的近似的十进制值是多少?

C. 当系统初始启动时,时钟从0开始,并且一直保持计数。在这个例子中,系统已经运行了大约100个小时。程序计算出的时间和实际的时间之差为多少?

D. 系统根据一枚来袭导弹的速率和它最后被雷达侦测到的时间,来预测它将在哪里出现。假定飞毛腿的速率大约是2000米每秒,对它的预测偏差了多少?

通过一次读取时钟得到的绝对时间中的轻微错误,通常不会影响跟踪的计算。相反,它应该依赖于两次连续的读取之间的相对时间。问题是爱国者导弹的软件已经升级,可以使用更精确的函数来读取时间,但不是所有的函数调用都用新的代码替换了。结果就是,跟踪软件一次读取用的是精确的时间,而另一次读取用的是不精确的时间。

解答:
在大多数情况中,浮点数的有限精度不是主要的问题,因为计算的相对误差仍然是相当低的。然而在这个例子中,系统对于绝对误差是很敏感的。

A. 我们可以看到0.1-x的二进制表示为:

0.000000000000000000000001100[1100]…2

B. 把这个表示与1/10的二进制表示进行比较,我们可以看到这就是2-20X(1/10),也就是大约9.54X10-8

C. 9. 54X10'8 X100X60X60X10约等于0. 343秒。

D.0. 343X2000约等于687米。

你可能感兴趣的:(CSAPP)