即使数字在小数点后 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);
我正在为一个在 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);