综合题

问答题

(1)当n=0时,f1会出现死循环,为什么?若将f1中的变量i和n都定义为int型,则f1是否还会出 现死循环?为什么?

【正确答案】

由于i和n是unsigned型,故“i<=n-1”是无符号数比较,n=0时,n-1的机器数为全1,值是232-1, 为unsigned型可表示的最大数,条件“i<=n-1”永真,因此出现死循环。

若i和n改为int类型,则不会出现死循环。

因为“i<=n-1”是带符号整数比较,n=0时,n-1的值是-1,当i=0时条件“i<=n-1”不成立,此时 退出for循环。

【答案解析】
问答题

(2)f1(23)和f2(23)的返回值是否相等?机器数各是什么(用十六进制表示)?

【正确答案】

f1(23)与f2(23)的返回值相等。

f1(23)的机器数是OOFF FFFFH,

f2(23)的机器数是4B7F FFFFH。

【答案解析】
问答题

(3)f1(24)和f2(24)的返回值分别为33 554 431和33 554 432.0,为什么不相等?

【正确答案】

当n=24时,f(24)=1 1111 1111 1111 1111 1111 1111 B,而float型数只有24位有效位,舍入 后数值增大,所以f2(24)比f1(24)大1。

【答案解析】
问答题

(4)f(31)=232-1,而f1(31)的返回值却为-1,为什么?若使f1(n)的返回值与f(n)相等,则最大的n 是多少?

【正确答案】

显然f(31)已超出了int型数据的表示范围,用f1(31)实现时得到的机器数为32个1,作为int 型数解释时其值为-1,即f1(31)的返回值为-1。

因为int型最大可表示数是0后面加31个1,故使f1(n)的返回值与f(n)相等的最大n值是30。

【答案解析】
问答题

(5)f2(127)的机器数为7F80 0000H,对应的值是什么?若使f2(n)的结果不溢出,则最大的n是 多少?若使f2(n)的结果精确(无舍入),则最大的n是多少?

【正确答案】

IEEE 754标准用“阶码全1、尾数全0”表示无穷大。f2返回值为float型,机器数7F80 0000H 对应的值是+∞。

 当n=126时,f(126)=2217-1=1.1…1×2126,对应阶码为127+126=253,尾数部分舍入后阶码加1, 最终阶码为254,是IEEE754单精度格式表示的最大阶码。故使f2结果不溢出的最大n值为126。

当n=23时,f(23)为24位1,float型数有24位有效位,所以不需舍入,结果精确。故使f2获得精确结果的最大n值为23。

【答案解析】