即使数字在小数点后 4 位以内,也会在 EXPECT_FLOAT_EQ 上触发 googletest 错误

Triggering googletest error on EXPECT_FLOAT_EQ even when numbers are within 4 decimal places

我正在为一个在 C++ 中执行浮点计算的程序创建单元测试。在整个单元测试文件中,我一直在使用 EXPECT_FLOAT_EQ 成功,即使浮点数不完全相同:一些成功的测试结果是 ~.00000001 关闭而没有触发错误。这对我来说很有意义,因为我找到的文档 here 指出只要结果“计算到小数点后四位”,就不会触发任何错误。

但是,对于一些特定的计算,google 测试返回错误,即使数字在小数点后四位以内也是如此。这是有问题的测试:

EXPECT_FLOAT_EQ(test_Calc->result, 0.00714787);

这是返回的错误:

Expected: test_Calc->result
  Which is: 0.0071478747
  To be equal to: 0.00714787

这不仅计算到小数点后 4 位,还计算到小数点后 8 位,所以我不确定出了什么问题。我对 EXPECT_FLOAT_EQ 的小数位的假设是错误的,还是其他地方出了问题?我宁愿不必仅针对此特定测试使用 EXPECT_NEAR。

变量 test_Calc->result 是一个浮点数,我尝试将预期值作为浮点变量输入:似乎没有任何效果。

IBM 文档弄错了。 EXPECT_FLOAT_EQ 宏要求值“几乎相等”,或者严格定义在最后一位的 4 个单位以内。 Google 浮点比较测试文档提供了简短的 explanation ULP,并参考了更多阅读材料。

如果您希望值在小数点后 4 位内相等,请使用

EXPECT_NEAR(test_Calc->result, 0.00714787, 0.0001);