不能用==判断两个浮点数相等
在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值
fabs(a-b) 是否小于某个阈值,例如 1e-9。
////在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值 ////fabs(a - b) 是否小于某个阈值,例如 1e-9。 //#include <stdio.h> //#include <math.h> //#define EPSILON 0.000001 //int main() //{ // float i; // //死循环 // //for (i = 0; i != 10; i += 0.4) // //{ // // printf("%.11f\n", i); // //} // //在10附近停止 // for (i = 0;!(fabs(i - 10) < EPSILON) ; i += 0.4) // { // printf("%.11f\n", i); // } // // printf("%.11f\n", i); // // return 0; //} #include <stdio.h> #include <math.h> #define EPSILON 1e-6 //程序输出: //a + b != 0.7 //fa + fb == 0.7 //请按任意键继续. . . int main() { float a = 0.3; float b = 0.4; float c = a + b; if (c == 0.7) printf("a + b == 0.7\n"); else printf("a + b != 0.7\n"); float fa = 0.3; float fb = 0.4; float fc = fa + fb; if (fabs(fc - 0.7) < EPSILON) printf("fa + fb == 0.7\n"); else printf("fa + fb != 0.7\n"); return 0; }
从程序可以看出,由于IEEE浮点标准表示数据精度有限,浮点运算很容易造成微小的误差,所以不能用等号判断浮点数是否相等。