zoukankan      html  css  js  c++  java
  • 不能用==判断两个浮点数相等

    在判断两个浮点数 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浮点标准表示数据精度有限,浮点运算很容易造成微小的误差,所以不能用等号判断浮点数是否相等。

  • 相关阅读:
    C#匿名类与dynamic关键字有意思的玩法
    C#中参数化查询速度慢的原因
    拉姆达表达式的一些常用知识
    git的学习
    yield return的使用。。。
    C# Cache缓存的应用
    C# 异步编程,async与await的简单学习
    SSH
    SSM搭建手册
    PLsql快捷键
  • 原文地址:https://www.cnblogs.com/lakeone/p/4984862.html
Copyright © 2011-2022 走看看