4

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

我发现这种方式的容差为 1e-12,但尚不清楚这是最好的方式:

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

我不是在问如何比较一般的浮点数。我知道这不是一个简单的问题。我在问如何在预先知道一定容差的情况下使用 Catch2。

以下内容不起作用,因为相对(epsilon)误差在零附近表现不佳:

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, ???));
}
4

1 回答 1

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

来自 Catch2 GitHub

于 2020-02-17T15:32:19.280 回答