Каков рекомендуемый способ проверки приблизительных нулей в 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 ответа

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

Из Catch2 GitHub

Catch теперь рекомендует совпадения, а не прибл.Нравиться:

REQUIRE_THAT(a, WithinAbs(b, 1e-12));

Другие вопросы по тегам