#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();
}
[c++]Double数据相等比较
猜你喜欢
转载自blog.csdn.net/adream307/article/details/80923790
今日推荐
周排行