[c++]Double数据相等比较

#include <gtest/gtest.h>
#include <stdint.h>

// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

uint64_t DoubleToBaised(double x)
{
        uint64_t mask = 1ULL << 63;
        uint64_t u = *((uint64_t*)&x);
        if(u&mask) u = ~u+1;
        else u |= mask;
        return u;
}

bool DoubleEqual(double x1, double x2)
{
        uint64_t u1 = DoubleToBaised(x1);
        uint64_t u2 = DoubleToBaised(x2);
        int ulp = 4;
        if(u1>u2) return (u1-u2)<ulp;
        else return (u2-u1)<ulp;
}

TEST(DoubleTest, EQ1){
        double d1 = 3.41;
        double d2 = 3.40+0.01;
        EXPECT_EQ(d1,d2);
}

TEST(DoubleTest, EQ2){
        double d1 = 3.41;
        double d2 = 3.40+0.01;
        EXPECT_DOUBLE_EQ(d1,d2);
}

TEST(DoubleTest, EQ3){
        double d1 = 3.41;
        double d2 = 3.40+0.01;
        ASSERT_TRUE(DoubleEqual(d1,d2));
}

int main(int argc,char *argv[])
{
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}

猜你喜欢

转载自blog.csdn.net/adream307/article/details/80923790