触发EXPECT_FLOAT_EQ上的googletest错误,即使数字在小数点后4位以内 我正在为一个程序执行单元测试,该程序在C++中执行浮点运算。在整个单元测试文件中,我一直在成功地使用EXPECT\u FLOAT\u EQ,即使浮点数不完全相同:一些成功的测试的结果在不触发错误的情况下关闭了约.0000000 1。这对我来说很有意义,因为我发现的文档表明,只要结果“总计到小数点后四位”,就不会触发任何错误

触发EXPECT_FLOAT_EQ上的googletest错误,即使数字在小数点后4位以内 我正在为一个程序执行单元测试,该程序在C++中执行浮点运算。在整个单元测试文件中,我一直在成功地使用EXPECT\u FLOAT\u EQ,即使浮点数不完全相同:一些成功的测试的结果在不触发错误的情况下关闭了约.0000000 1。这对我来说很有意义,因为我发现的文档表明,只要结果“总计到小数点后四位”,就不会触发任何错误,c++,floating-point,googletest,C++,Floating Point,Googletest,然而,对于一些特定的计算,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\u

然而,对于一些特定的计算,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\u FLOAT\u EQ的小数位数的假设是错误的吗,还是其他什么地方出了问题?我不希望只在这个特定的测试中使用EXPECT\u NEAR


变量test\u Calc->result是一个float,我尝试将期望值作为一个float变量输入:似乎什么都不起作用。

IBM文档把它搞错了。
EXPECT\u FLOAT\u EQ
宏要求值“几乎相等”,或者严格定义为最后4个单位以内。关于浮点比较的Google测试文档提供了ULP的简短介绍,并提供了更多阅读参考

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

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

这里没有问题
0.00714787
不是float类型。@user253751我添加了一个特定的问题,谢谢。@vahancho这是什么意思?我还试着用下面的方式编写测试:“float test1=0.00714787;EXPECT_float_EQ(test_Calc->result,test1);”,这似乎也不起作用。
0.00714787f
给出了什么?