文章
408
粉丝
0
获赞
0
访问
106.8k
1):因为此时n-1等于FFFFFFFF,在unsigned下是最大值,不会此时程序发现i>-1,不会进入for循环;
2):相等,f1此时是00FFFFFF,f2此时是467FFFFF;
3):因为float单精度的尾数部分加上隐藏位才24位,但f2(24)此时会有25位尾数会对其进行舍去,而f1中int可以表示31位数(不含符号位),此时并未超出;
4):此时f1的数据是FFFFFFFF,补码表示,此时数值就是-1;最大的n是30;
5):2^(128),此时表示无穷大;最大的n是126,结果精确此时n最大为23
评分及理由
(1)得分及理由(满分4分)
学生回答错误。学生认为n=0时不会进入循环,但标准答案指出n=0时n-1为无符号最大值(0xFFFFFFFF),条件i<=n-1永真,导致死循环。学生未理解无符号整数比较的语义,且未回答第二部分(改为int型不会死循环的原因)。扣4分。
(2)得分及理由(满分3分)
学生回答部分正确。学生正确指出返回值相等,但f1(23)的机器数错误(应为00FFFFFF,学生写对),f2(23)的机器数错误(标准答案为4B7FFFFF,学生写为467FFFFF,阶码和尾数均不正确)。扣2分,得1分。
(3)得分及理由(满分1分)
学生回答正确。学生解释了float尾数仅24位(含隐藏位),而f(24)需要25位,导致舍入后数值增大。与标准答案一致。得1分。
(4)得分及理由(满分2分)
学生回答部分正确。学生正确解释f1(31)返回-1的原因(机器数为0xFFFFFFFF,补码解释为-1),并正确给出最大n=30。但未说明int型表示范围(最大为2^31-1)。扣0.5分,得1.5分。
(5)得分及理由(满分3分)
学生回答部分正确。学生正确指出f2(127)对应无穷大(但未写+∞),并正确给出不溢出的最大n=126和精确的最大n=23。但数值2^(128)描述不准确(应为+∞)。扣0.5分,得2.5分。
题目总分:0+1+1+1.5+2.5=6分
登录后发布评论
暂无评论,来抢沙发