| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 621 人关注过本帖
标题:c疑问,请指教
只看楼主 加入收藏
祝建新
Rank: 1
等 级:新手上路
帖 子:10
专家分:3
注 册:2010-3-25
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:6 
c疑问,请指教
#include<stdio.h>
#include<stdlib.h>
int main ()
{
    float f=25.09;
    if (f==25.09)
      printf("Right");
      else
      printf("Wrong");
      system("pause");
      return 0;
   
}
结果输出wrong,为什么?将f=25.09改成f=25.00,并且改成if(f==25.00)后则输出Right,为什么?
搜索更多相关主题的帖子: 指教 疑问 
2010-04-15 16:31
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:1 
这个问题很值得深究的
你可以仔细参照下浮点数在内存分配中的布局的相关资料
以及浮点数的小数部分从十进制 转换为二进制的
2010-04-15 16:52
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
浮点数一般都是通过相减的差值和约定的精度相比较
2010-04-15 16:54
xiaoxinwan
Rank: 2
等 级:论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
收藏
得分:1 
把float改为double, 就可以了。到底什么原因,往高手指教
2010-04-15 17:09
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:1 
原因是C语言默认把浮点数都把double类型处理,除非声明为float类型,对上面的程序,f是个float类型,而用作比较25.09是个double类型,而25.09又不能在float表达的精度内完全表示(及除不尽)有精度错误,double类型比float类型精度高(也有精度损失),double能表示精度比float高,所以不相等,至于改成25.00,这个数能被浮点数无误差的表示,所以输出right。
如楼上说的,改成double,2个都能表示相同的精度,所以也输出right
#include<stdio.h>
#include<stdlib.h>
int main ()
{
    float f=25.09;
    if (f==(float)25.09)//把25.09强制转换成float类型  也可以输出right
      printf("Right");
      else
      printf("Wrong");
      return 0;
}
2010-04-15 20:23
h646028147
Rank: 2
等 级:论坛游民
帖 子:33
专家分:23
注 册:2010-4-12
收藏
得分:1 
我觉得应该改成:
头文件#include<math.h>
if(fabs(f-25.09)<1e-6)
2010-04-15 22:08
祝建新
Rank: 1
等 级:新手上路
帖 子:10
专家分:3
注 册:2010-3-25
收藏
得分:0 
谢谢各位!
2010-04-15 23:03
快速回复:c疑问,请指教
数据加载中...
 
   



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

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