在判斷兩個浮點數 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浮點標准表示數據精度有限,浮點運算很容易造成微小的誤差,所以不能用等號判斷浮點數是否相等。
