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

求原理!!谢谢了。

你查一下符点数存储标准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了!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-12
可以判断的 ,只不过浮点数精度过高,难以达到一致。
举个例子
#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)就不能判断呢?

第2个回答  2012-04-12
因为a ,b实数,而实数在计算机和存储时会有一些微小的误差,因此不能直接进行“if(a= =b)
判断。必须用if (fabs(a-b)<1e-6进行判断
第3个回答  2012-04-12
因为浮点数都是有精度的,比如1.0000000000和1.000000是不一样的追问

偶是个菜鸟,想问一下它们区别在哪呢?能不能详细点······

第4个回答  2012-04-12
请你解释详细一点

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网