随笔 - 21  文章 - 0  trackbacks - 0
<2014年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜


float double是否相等,一定是要在精度范围谈这个事情,实际应用中不可能精确到小数点那么多位的。

浮点数和0之间的比较


const float EPSINON = 0.000001f;

int na= 0x800001;

    float a;

    memcpy(&a, &na, sizeof(na));


    assert (a < EPSINON && a > -EPSINON ) 满足条件,认为相等


    float b = 0.0f;

    assert (b < EPSINON && b > -EPSINON)  满足条件,认为相等

================================================================

float之间的比较

下面a, b都是非常小的数,

        int na= 0x800001;

        float a;

        memcpy(&a, &na, sizeof(na));

        int nb = 0x800002;

        float b;

        memcpy(&b, &nb, sizeof(nb));

        这里不相等,但是在精度范围内,他们是相等的。

        if (b == a )
        {
            printf("a ==b \n");
        }

 
        //两个相减,在精度范围内,比如小数点后6位,这个结果是0.000000,即两个数是相等。
        float x = b -a;

        printf("over b - a %f\n", x);


        if (x < EPSINON && x > -EPSINON)
        {
            printf("x == 0");
        }

 

posted on 2014-08-25 09:34 pizzx 阅读(2906) 评论(0)  编辑 收藏 引用 所属分类: c++/boost

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理