你查一下符点数存储标准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了!
可以判断的 ,只不过浮点数精度过高,难以达到一致。
举个例子
#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,所以在进行算术逻辑运算的时候,会丧失精度
=========================================
你自己把我给你的程序拿去测试下就知道了
=========================================
记得给分哦
=========================================
因为a ,b实数,而实数在计算机和存储时会有一些微小的误差,因此不能直接进行“if(a= =b)
判断。必须用if (fabs(a-b)<1e-6进行判断
因为浮点数都是有精度的,比如1.0000000000和1.000000是不一样的
请你解释详细一点