15 constexpr
double ln_2{0.693147180559945309417232121458176568L};
16 constexpr
double negative_inf{-std::numeric_limits<double>::infinity()};
21 [[nodiscard]]
inline double add(
double const log_x,
double const log_y) noexcept
23 double const max{std::max(log_x, log_y)};
28 template <
typename... types>
29 [[nodiscard]]
double add(
double const log_x,
double const log_y, types... logs) noexcept
31 return add(
add(log_y, log_x), logs...);
36 [[nodiscard]]
inline double substract(
double const log_x,
double const log_y) noexcept
38 double const difference{log_y - log_x};
39 return log_x + difference > -
ln_2 ? std::log(std::expm1(difference)) : std::log1p(-std::exp(difference));
44 [[nodiscard]]
double operator()(
double const log_x,
double const log_y)
const noexcept
46 return add(log_x, log_y);
Definition: logspace.hpp:13
double substract(double const log_x, double const log_y) noexcept
The log of a difference of two log terms. (log_x - log_y)
Definition: logspace.hpp:36
double add(double const log_x, double const log_y) noexcept
The log of a sum of two log terms.
Definition: logspace.hpp:21
constexpr double negative_inf
Definition: logspace.hpp:16
constexpr double ln_2
Definition: logspace.hpp:15
Definition: logspace.hpp:43
double operator()(double const log_x, double const log_y) const noexcept
Definition: logspace.hpp:44