不能用==判断两个浮点数相等

在判断两个浮点数 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
", i);
//    //}
//    //在10附近停止
//    for (i = 0;!(fabs(i - 10) < EPSILON) ; i += 0.4)    
//    {
//        printf("%.11f
", i);
//    }
//
//    printf("%.11f
", 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
");
    else
        printf("a + b != 0.7
");

    float fa = 0.3;
    float fb = 0.4;
    float fc = fa + fb;
    if (fabs(fc - 0.7) < EPSILON)
        printf("fa + fb == 0.7
");
    else
        printf("fa + fb != 0.7
");

    return 0;
}

从程序可以看出,由于IEEE浮点标准表示数据精度有限,浮点运算很容易造成微小的误差,所以不能用等号判断浮点数是否相等。

原文地址:https://www.cnblogs.com/lakeone/p/4984862.html