文章
63
粉丝
0
获赞
0
访问
13.1k
(1)因为当n=0时,因为n的数据类型为unsigned无符号整数,所以n-1会溢出编程unsigned所能表示的最大整数,使得无论i怎么增加,都保持i<=n。如果将n与i都改为int,则不会出现死循环,因为int可以表示负数,所以n-1=-1,i存在大于n-1的可能。
(2)根据f(n)的公式,f(23)为111...1B(24个1),int类型有1个符号位和31个数值位,可以表示24个1;float类型有23位尾数位加1位隐含的'1',共24位,也能表示24个1,所以f1(23)与f2(23)相等。f1(23)=00FF FFFFH,f2(23)=4B7F FFFFH。
(3)由(2)得,float的尾数部分最多能表示24个1,所以f2(24)的精度会产生损失,但int类型不会产生影响,所以f1(23)与f2(23)不相等。
(4)因为int类型最多只能表示11...111B(31个1)即2^31-1,而f(31)=2^32-1=11....1111B(32个1),所以会溢出符号位变为1,而对于32位补码,此时数值为-1。若使f1(n)的返回值与f(n)相等,最大的n为30。
(5)7F80 0000H=0111 1111 1000 0000 0000 0000 0000 0000B,符号位为0,表示整数;阶码位为1111 1111B阶码全为1,所以表示无穷大。当n=126时,f(n)=2^127-1,对应阶码为127+126=253,同时尾数部分需要舍入,舍入后阶码加1,为254,所以若使f2(n)的结果不溢出,最大的n是126。由第(2)问得,若使f2(n)的结果精确(无舍入),则最大的n是23。
评分及理由
(1)得分及理由(满分4分)
学生正确解释了n=0时死循环的原因:n为unsigned型,n-1溢出为最大值,条件永真。同时正确说明了改为int型后不会死循环,因为n-1=-1,i=0时不满足条件。答案与标准答案一致,逻辑完整。得4分。
(2)得分及理由(满分3分)
学生正确判断f1(23)和f2(23)返回值相等,并给出了正确的机器数:f1(23)=00FFFFFFH,f2(23)=4B7FFFFFH。解释部分基本正确,但f1(23)的机器数应表示为00FF FFFFH(十六进制),学生写为0...
登录后发布评论
暂无评论,来抢沙发