C语言中为什么不能用 if(a==b)判断两个浮点数是否相等?我知道 if (fabs(a-b)<1e-6)可以判断。求高人解答!

求原理!!谢谢了。... 求原理!!谢谢了。 展开
 我来答
kaixingui2012
2012-04-12 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6434万
展开全部
你查一下符点数存储标准IEEE754就知道了!

符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的。

如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时会输出a=b

如果a或b是经过运算后得到的值,这时就不一定是一个精确的你想要的值了,如:
double b=2.6+2.7,a=5.3;
if ( a == b )
{
printf("a=b\n");
}
这时就不一定能输出a=b了!
WWWSVT8COM
2012-04-12 · 超过24用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:61.3万
展开全部
可以判断的 ,只不过浮点数精度过高,难以达到一致。
举个例子
#include <stdio.h>
int main()
{
float va1=0.1f;
float va2=2.1f;
va1-=0.09f;
va2-=2.09f;
printf("%e",va1-va2);
return 0;
}
这个程序并不输出0,而是7.45058e-009,所以在进行算术逻辑运算的时候,会丧失精度
=========================================
你自己把我给你的程序拿去测试下就知道了
=========================================
记得给分哦
=========================================
追问
这是结果,结果是0.000000可为什么用 if(a==b)就不能判断呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我的lov999
2012-04-12
知道答主
回答量:15
采纳率:0%
帮助的人:5万
展开全部
因为a ,b实数,而实数在计算机和存储时会有一些微小的误差,因此不能直接进行“if(a= =b)
判断。必须用if (fabs(a-b)<1e-6进行判断
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
脾角额5
2012-04-12 · TA获得超过437个赞
知道小有建树答主
回答量:343
采纳率:0%
帮助的人:203万
展开全部
因为浮点数都是有精度的,比如1.0000000000和1.000000是不一样的
追问
偶是个菜鸟,想问一下它们区别在哪呢?能不能详细点······
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扬城烟花三月楼
2012-04-12
知道答主
回答量:19
采纳率:0%
帮助的人:7.9万
展开全部
请你解释详细一点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式