不能用==判斷兩個浮點數相等


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM