根据 Google Test 关于浮点比较的文档,EXPECT_DOUBLE_EQ
验证ASSERT_DOUBLE_EQ
两个双精度值val1
和val2
近似相等,彼此之间的差异在 4 个 ULP(最后一位单位)以内。
但是,尽管两个双精度数的差异出现在 2 个 ULP 中,但以下代码示例仍未通过测试。
TEST(Foo, doubles_match)
{
ASSERT_DOUBLE_EQ(0.62469504755442462, 0.62469504755442407);
}
结果:
error: Expected equality of these values:
0.62469504755442462
0.62469504755442407
我错过了什么?
问题中提到的数字相隔 5 个 ULP(考虑二进制 64 位 IEEE-754 数字)。你可以使用此程序验证这一点:
它输出: