C语言中浮点数是有精度的!!
也就造成了浮点数的比较会产生误差,因为精度有限,精度外的数是不确定的。
也就造成了浮点数的比较会产生误差,因为精度有限,精度外的数是不确定的。
#include<stdio.h>
void cmp_float(float a, float b);
void cmp_float_e(float a, float b);
int main() {
float a;
float b;
a = 1.123456789;
b = 1.123456879;
cmp_float(a,b);
cmp_float_e(a,b);
a = 1.1234567;
b = 1.1234568;
cmp_float(a,b);
cmp_float_e(a,b);
return 0;
}
void cmp_float(float a, float b) {
printf("%f\n", a);
printf("%f\n", b);
printf("cmp_float() ");
if (a > b)
printf("a > b\n");
else if (a < b)
printf("a < b\n");
else
printf("a = b\n");
}
void cmp_float_e(float a, float b) {
double e = 0.000001;
printf("cmp_float_e() ");
if (a - b > e)
printf("a > b\n");
else if (a - b < e)
printf("a < b\n");
else
printf("a = b\n");
}
第一次 a = 1.123456789
b = 1.123456879
这里不用精度e的话,居然相等,所以说,浮点数的比较还是很需要用精度来控制的。
虽然这里只是简单的举例,但是已经足够说明问题了。
第二次 a = 1.1234567
b = 1.1234568