在Catch2中检查近似零的推荐方法是什么?

时间:2019-06-05 18:21:22

标签: c++ floating-point c++14 catch2 floating-point-comparison

在Catch2中比较近似零的规范方法是什么?

我发现这种方法的公差为1e-12,但尚不清楚这是最佳方法:

TEST("a approx. equal to b", "[test]"){
    REQUIRE( a - b == (0_a).margin(1e-12) );
}

我一般不问如何比较浮点数。我知道这不是一个简单的问题。我要问的是,在给定一定的公差之前,如何使用Catch2。

以下操作无效,因为相对(ε)错误在零附近的表现不佳:

TEST("a approx. equal to b", "[test]"){
    REQUIRE( a - b == (0_a).epsilon(1e-5) );
}

其他可能的(不太好)(替代方案似乎是

TEST("a approx. equal to b", "[test]"){
    REQUIRE( std::abs( a - b ) < 1e-12 );
}
TEST("a approx. equal to b", "[test]"){
    REQUIRE_THAT( a - b, WithinULP(0., ???));
}
TEST("a approx. equal to b", "[test]"){
    REQUIRE_THAT( a, WithinULP(b, ???));
}

1 个答案:

答案 0 :(得分:7)

(a == Approx(b).margin(1e-12))

From the Catch2 GitHub