c++ - 对于 double 或 float 的总和,EXPECT_EQ 出错

标签 c++ unit-testing floating-point googletest

我无法理解为什么在对双数或 float 求和的情况下测试用例会失败。它适用于整数数据类型。

//simple_method.h中的方法

double sum ( double a, double b)
{
    double res = a+b;
    return res;
}

//该方法的测试用例

TEST(simpleSum, sumOfFloat)
{
    EXPECT_EQ(4.56, sum(0.56, 4.0));
}

//输出是

Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from simpleSum
[ RUN      ] simpleSum.sumOfFloat
/home/pcadmin/Desktop/so/so3/simple_method_test.cpp:7: Failure
Value of: sum(0.56, 4.0)
  Actual: 4.56
Expected: 4.56
[  FAILED  ] simpleSum.sumOfFloat (0 ms)
[----------] 1 test from simpleSum (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] simpleSum.sumOfFloat

 1 FAILED TEST

最佳答案

使用 EXPECT_NEARDoubleEq匹配器代替。浮点运算可能导致 rounding errors这使得结果略有不同。

关于c++ - 对于 double 或 float 的总和,EXPECT_EQ 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128510/

相关文章:

floating-point - 散列浮点向量的好方法?

optimization - ARM 上的快速浮点到 int 转换和浮点精度 (iPhone 3GS/4)

C++ 不会通过取消注释移动运算符来编译

C++ 插件 : pass object across boundary (emulating it)

c++ - 类对象成员函数的内存分配

c# - 在调用方法中模拟局部变量

c++ - C++98 中的容器初始化

python-3.x - 用模拟修补父类(super class)方法

java - JUnit IO 测试

floating-point - scipy.optimize.minimize的精度