浮点数因为存储形式的原因不能直接和0值比较,当要判断一个浮点数是否等于0时:
fabs(x)<=1e-6 就是认为是0了
float,double分别遵循R32-24,R64-53的标准。
所以float的精度误差在1e-6;double精度误差在1e-15
所以要判断一个单精度浮点数:则是if( abs(f) <= 1e-6);
要判断一个双精度浮点数:则是if( abs(f) <= 1e-15 );
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int main()
{
float a=0;
double b=0;
if(fabs(a)< 1e-6)
{
printf("%f\n",fabs(a));
printf("float Equal 0!\n");
}
else
{
printf("%f\n",fabs(a));
printf("float not Equal 0!\n");
}
if(fabs(b)<1e-15)
{
printf("%f\n",fabs(a));
printf("double Equal 0!\n");
}
else
{
printf("%f\n",fabs(a));
printf("double not Equal 0!\n");
}
return 0;
}