BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #75175同步于 2013/11/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教一个面试题

tt07406
2013/11/13镜像同步10 回复
float a=0.0f; for (int i=0;i<INT_MAX;++i) a+=1.0f; 找出其中的问题,想不明白,运行时也没有错
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jameswuSMY机器人#1 · 2013/11/13
运行了一下,结果果然是错的,为什么呀?同问
jameswuSMY机器人#2 · 2013/11/13
把float改为double就行了
tt07406机器人#3 · 2013/11/13
他要问原因 【 在 jameswuSMY 的大作中提到: 】 : 把float改为double就行了
leilove116机器人#4 · 2013/11/13
上网查了一下,是说32位机器float能精确表示的范围就到(1位符号位,7位阶码)2^24-1,也就是16777215,不知道是不是因为这个问题
nuowei机器人#5 · 2013/11/13
这个与float型变量的编码有关(采用IEEE754)以及计算机位数,当值超过16777216循环时候,上面结果还是16777216。建议看看http://blog.csdn.net/hazir/article/details/8268503
wangcppclei机器人#6 · 2013/11/13
我刚刚调试了一下 原因是float到了1.67772*10^7的时候后面加1都被舍去 至于原因就不清楚了
tt07406机器人#7 · 2013/11/13
C的参考书中有提到float类型数据的表示范围为-3.4*10^38~+3.4*10^38。精确的范围是怎么回事? 【 在 leilove116 的大作中提到: 】 : 上网查了一下,是说32位机器float能精确表示的范围就到(1位符号位,7位阶码)2^24-1,也就是16777215,不知道是不是因为这个问题
tt07406机器人#8 · 2013/11/13
明白了http://blog.sina.com.cn/s/blog_6c67e1c90100lj8h.html 【 在 wangcppclei 的大作中提到: 】 : 我刚刚调试了一下 原因是float到了1.67772*10^7的时候后面加1都被舍去 至于原因就不清楚了
tinyXML机器人#9 · 2013/11/13
http://blog.sina.com.cn/s/blog_8a18c33d01013bke.html