|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ c疑问,请指教
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
621
人关注过本帖
标题:
c疑问,请指教
只看楼主
加入收藏
祝建新
等 级:
新手上路
帖 子: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
来 自:湖南张家界
等 级:
贵宾
威 望:
24
帖 子:1386
专家分:6999
注 册:2010-3-8
第
2
楼
收藏
得分:1
这个问题很值得深究的
你可以仔细参照下浮点数在内存分配中的布局的相关资料
以及浮点数的小数部分从十进制 转换为二进制的
2010-04-15 16:52
举报帖子
使用道具
赠送鲜花
hahayezhe
来 自:湖南张家界
等 级:
贵宾
威 望:
24
帖 子:1386
专家分:6999
注 册:2010-3-8
第
3
楼
收藏
得分:0
浮点数一般都是通过相减的差值和约定的精度相比较
2010-04-15 16:54
举报帖子
使用道具
赠送鲜花
xiaoxinwan
等 级:
论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
第
4
楼
收藏
得分:1
把float改为double, 就可以了。到底什么原因,往高手指教
2010-04-15 17:09
举报帖子
使用道具
赠送鲜花
kingsroot
等 级:
蜘蛛侠
威 望:
1
帖 子:284
专家分:1159
注 册:2010-3-28
第
5
楼
收藏
得分: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
等 级:
论坛游民
帖 子:33
专家分:23
注 册:2010-4-12
第
6
楼
收藏
得分:1
我觉得应该改成:
头文件#include<math.h>
if(fabs(f-25.09)<1e-6)
2010-04-15 22:08
举报帖子
使用道具
赠送鲜花
祝建新
等 级:
新手上路
帖 子:10
专家分:3
注 册:2010-3-25
第
7
楼
收藏
得分:0
谢谢各位!
2010-04-15 23:03
举报帖子
使用道具
赠送鲜花
7
1/1页
1
快速回复:
c疑问,请指教
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.024892 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved