两个float数的比较大小以及浮点数是否和0相等
计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在计算机中可能就变成相等的了。例如:
float a=10.222222225,b=10.222222229
数学上a和b是不相等的,但在32位计算机中它们是相等的。
如果两个同符号浮点数之差的绝对值小于或等于某一个可接受的误差(即精度),就认为它们是相等的。
不要直接用“==”或者“!=”对两个浮点数进行比较,但是可以直接用“<”和“>”比较谁大谁小。
//test.cpp
//****************************************
#include <stdio.h>
#include <math.h>
#define EPSILON 1e-6
int main(void)
{
float a = 0.000003;
float b = 0.000005;
printf("a=%f/n",a);
printf("b=%f/n",b);
printf("abs(a-b)=%f/n",abs(a-b));
printf("fabs(a-b)=%f/n",fabs(a-b));
if ( fabs(a-b) <= EPSILON ) //判断浮点数是否相等
{
printf("a==b/n");
}else
{
printf("a!=b/n");
}
if ( fabs(a) <= EPSILON) //判断浮点数是否等于0
{
printf("a==0/n");
}else
{
printf("a!=0/n");
}
if (a > b) //比较两个浮点数的大小,
{
printf("a>b/n");
}else
{
printf("a<b/n");
}
return 0;
}
//****************************************