标题:一个神奇的问题和它的答案
取消只看楼主
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424309-1-1.html




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

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