4

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

1 に答える 1