文章
86
粉丝
39
获赞
1
访问
8.4k
1、当n=0时,n-1为0xFFFFFFFF,是32位无符号能表示的最大值,因此i<=n-1的条件将永远满足,出现死循环
也可能会出现死循环,当n=0x80000000,时n-1会溢出,变成0x7FFFFFFF,是int型变量能表示的最大值,条件同样会一直满足
2、从代码可以看出sum计算的是1+2+2平方+....+2的n次方
则f1(23)和f2(23)的数值是2的24次方-1,即int型的0x00FF FFFF,有24个1,而float型数据的尾数部分的有效位数是23位加上隐藏
的一位刚好24位,因此都能够正确保存,浮点表示为1.111111111111 * 2^23即,阶数为127+23=10010110
尾数为11111111111111111111,则机器数为0x4B7F FFFF
3、f(24) = 2的25次方-1,即int的0x01FF FFFF,从上面可以得到,float型只能保存24位有效尾数,则这里共有25个1,
因此会进行舍入,导致结果不相等,这里是入1,则float的数值为由1.11111111 * 2^24,尾数进一后为
10.0000000 * 2^24=2^25,则f2比f1多1
4、f(31)=0xFFFF FFFF,是int型中-1的补码表示,因此f1的返回值是-1。
最大的n是f(30)=0x7FFF FFFF,n为30
5、7F80 0000H的阶码段为111 1111 1,尾数段为0,符号位为0,则表示正无穷,
float型能表示的最大值为1.111111111 * 2^127,由3可以得知f(127) = 2^128 - 1,浮点表示为1.111111111(128个1)*2^127
,当经过舍入后会变成1.000 * 2^128,阶码上溢,因此最大得n是126
无舍入由2和3可知为n=23
登录后发布评论
暂无评论,来抢沙发