autoppl  v0.8
A C++ template library for probabilistic programming
math.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <cmath>
3 #include <algorithm>
4 #include <iterator>
5 
6 namespace ppl {
7 namespace math {
8 
9 template <class T>
10 inline constexpr T inf =
11  std::numeric_limits<T>::is_iec559 ?
12  std::numeric_limits<T>::infinity() :
13  std::numeric_limits<T>::max();
14 
15 template <class T>
16 inline constexpr T neg_inf =
17  std::numeric_limits<T>::is_iec559 ?
18  -std::numeric_limits<T>::infinity() :
19  std::numeric_limits<T>::lowest();
20 
24 template <class T>
25 inline T lse(T x, T y)
26 {
27  if (x == neg_inf<T>) return y;
28  if (x == inf<T> && y == inf<T>) return inf<T>;
29  if (x >= y) return x + std::log(1. + std::exp(y-x));
30  else return lse(y, x);
31 }
32 
33 } // namespace math
34 } // namespace ppl
ppl::math::neg_inf
constexpr T neg_inf
Definition: math.hpp:16
ppl::math::inf
constexpr T inf
Definition: math.hpp:10
ppl
Definition: bounded.hpp:11
ppl::math::lse
T lse(T x, T y)
Definition: math.hpp:25