C++ 检查Catch2中近似零的标准方法是什么?

C++ 检查Catch2中近似零的标准方法是什么?,c++,floating-point,c++14,catch2,floating-point-comparison,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 t

与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, ???));
}
(a == Approx(b).margin(1e-12))