Automatic Differentiation
 
Loading...
Searching...
No Matches
log_diff_exp.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_FUN_LOG_DIFF_EXP_HPP
2#define STAN_MATH_PRIM_FUN_LOG_DIFF_EXP_HPP
3
8
9namespace stan {
10namespace math {
11
50template <typename T1, typename T2, require_all_arithmetic_t<T1, T2>* = nullptr>
51inline return_type_t<T1, T2> log_diff_exp(const T1 x, const T2 y) {
52 if (x <= y) {
53 return (x < INFTY && x == y) ? NEGATIVE_INFTY : NOT_A_NUMBER;
54 }
55 return x + log1m_exp(y - x);
56}
57
68template <typename T1, typename T2, require_any_container_t<T1, T2>* = nullptr>
69inline auto log_diff_exp(const T1& a, const T2& b) {
71 a, b, [&](const auto& c, const auto& d) { return log_diff_exp(c, d); });
72}
73
74} // namespace math
75} // namespace stan
76
77#endif
typename return_type< Ts... >::type return_type_t
Convenience type for the return type of the specified template parameters.
static constexpr double NOT_A_NUMBER
(Quiet) not-a-number value.
Definition constants.hpp:56
fvar< T > log1m_exp(const fvar< T > &x)
Return the natural logarithm of one minus the exponentiation of the specified argument.
Definition log1m_exp.hpp:22
static constexpr double NEGATIVE_INFTY
Negative infinity.
Definition constants.hpp:51
fvar< T > log_diff_exp(const fvar< T > &x1, const fvar< T > &x2)
auto apply_scalar_binary(const T1 &x, const T2 &y, const F &f)
Base template function for vectorization of binary scalar functions defined by applying a functor to ...
static constexpr double INFTY
Positive infinity.
Definition constants.hpp:46
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...