Каков рекомендуемый способ проверки приблизительных нулей в 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, ???));
}
2 ответа
Catch теперь рекомендует совпадения, а не прибл.Нравиться:
REQUIRE_THAT(a, WithinAbs(b, 1e-12));