| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1625 人关注过本帖
标题:一个神奇的问题和它的答案
取消只看楼主 加入收藏
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
结帖率:81.25%
收藏
已结贴  问题点数:100 回复次数:2 
一个神奇的问题和它的答案
上课的时候老师提到的,答案真心挺神奇的(虽然没啥用),第一个给出完整正确答案的100分

int n;
if (n==(int)(float)n) printf("TRUE");


问什么情况下能输出TRUE
搜索更多相关主题的帖子: 正确答案 
2013-11-27 20:35
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 8楼 beyondyf
我也奇怪着,课堂上有人在ubuntu下测试对于某些大于2^24次方的数是不会输出TRUE的,但我回来用VC测试好像全都会输出,好迷惑- -

好吧,我公布一下答案,因为float采用24位存储尾数,所以对于在二进制下大于24位且最后几位不全为零的时候会因为编译器在化整数为1.a*2^b时a末尾存在的1省略掉而构成精度误差,但是现在测试不出来了= =

我也不知道为什么。可能编译器有什么特殊的处理不知道。。
2013-11-27 22:15
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 16楼 beyondyf
原来是这样,中间变量还有专门的规定啊。。
2013-11-27 22:47
快速回复:一个神奇的问题和它的答案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017022 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved