在 Catch2 中检查近似零的规范方法是什么?
What is the canonical way to check for approximate zeros in Catch2?
在 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, ???));
}
(a == Approx(b).margin(1e-12))
在 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, ???));
}
(a == Approx(b).margin(1e-12))