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

求原理!!谢谢了。
2025-03-18 21:15:37
推荐回答(5个)
回答1:

你查一下符点数存储标准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了!

回答2:

可以判断的 ,只不过浮点数精度过高,难以达到一致。
举个例子
#include
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,所以在进行算术逻辑运算的时候,会丧失精度
=========================================
你自己把我给你的程序拿去测试下就知道了
=========================================
记得给分哦
=========================================

回答3:

因为a ,b实数,而实数在计算机和存储时会有一些微小的误差,因此不能直接进行“if(a= =b)
判断。必须用if (fabs(a-b)<1e-6进行判断

回答4:

因为浮点数都是有精度的,比如1.0000000000和1.000000是不一样的

回答5:

请你解释详细一点