文章
62
粉丝
0
获赞
0
访问
10.0k
(1)
无符号32位整数0-1会变成UINT32_MAX,循环判断条件变为i<=UINT32_MAX,当i增加到UINT32_MAX时,继续+1又会回到0。
改为int型后不会出现死循环,因为0-1=-1,循环条件变为for(i = 0; i <= -1; i++),显然不会进入循环体。
(2)
相等,均为2^24 - 1。
007f ffffH
8B7f ffffH
(3)
f2(24)的结果超过了单精度浮点数的准确表示范围,出现了精度丢失。
(4)
因为2^32-1的二进制表示为全1,转换成有符号32位整数表示的数是-1。
n最大为31。
(5)
2^113
不溢出时,n最大为127。
结果精确的n最大为23。
评分及理由
(1)得分及理由(满分4分)
学生第一问回答正确,解释了无符号整数n=0时n-1变为最大值导致死循环,以及改为int型后不会死循环的原因。但未明确说明n-1的具体值(2³²-1)和比较条件永真,表述略有不足。扣1分。
得分:3分
(2)得分及理由(满分3分)
学生回答f1(23)和f2(23)返回值相等正确,但给出的机器数错误。f1(23)应为00FFFFFFH,学生写成007FFFFFH;f2(23)应为4B7FFFFFH,学生写成8B7FFFFFH(符号位错误)。机器数全错,扣2分。
得分:1分
(3)得分及理由(满分1分)
学生回答f2(24)因精度丢失导致不相等,基本正确,但未具体说明24位有效位数和舍入机制。因要点已涉及,不扣分。
得分:1分
(4)得分及理由(满分2分)
学生解释了f1(31)返回-1的原因(全1机器数解释为有符号整数),正确;但第二问最大n值回答为31错误(应为30),扣1分。
得分:1分
(5)得分及理由(满分3分)
第一问f2(127)的值回答错误(应为+∞,学生答2^113),扣1分;第二问不溢出的最大n回答错误(应为126,学生答127),扣1分;第三问精确结果的最大n回答正确(23)。
得分:1分
题目总分:3+1+1+1+1=7分
登录后发布评论
暂无评论,来抢沙发