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

问题描述 投票:0回答:1

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

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

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

c++ floating-point googletest
1个回答
2
投票

IBM 文档弄错了。

EXPECT_FLOAT_EQ
宏要求值“几乎相等”,或者严格定义在最后一位的 4 个单位以内。 有关浮点比较的 Google 测试文档 对 ULP 进行了简短的解释,并参考了更多阅读.

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

EXPECT_NEAR(test_Calc->result, 0.00714787, 0.0001);
© www.soinside.com 2019 - 2024. All rights reserved.