IT++ 4.3.1
log_exp.cpp
Go to the documentation of this file.
1
28
30#include <itpp/base/itcompat.h>
31
32namespace itpp
33{
34
35// log-2 of the elements
36vec log2(const vec &x) { return apply_function<double>(::log2, x); }
37mat log2(const mat &x) { return apply_function<double>(::log2, x); }
38
39// Safe substitute for <tt>log(exp(log_a) + exp(log_b))</tt>
40double log_add(double log_a, double log_b)
41{
42 if (log_a < log_b) {
43 double tmp = log_a;
44 log_a = log_b;
45 log_b = tmp;
46 }
47 double negdelta = log_b - log_a;
48 if ((negdelta < log_double_min) || std::isnan(negdelta))
49 return log_a;
50 else
51 return (log_a + log1p(std::exp(negdelta)));
52}
53
54}
double log_add(double log_a, double log_b)
Safe substitute for log(exp(log_a) + exp(log_b))
Definition log_exp.cpp:40
const double log_double_min
Constant definition to speed up trunc_log(), trunc_exp() and log_add()
Definition log_exp.h:101
vec log2(const vec &x)
log-2 of the elements
Definition log_exp.cpp:36
Vec< T > apply_function(T(*f)(T), const Vec< T > &v)
Help function to call for a function: Vec<T> function(Vec<T>)
IT++ compatibility types and functions.
Logarithmic and exponenential functions - header file.
itpp namespace
Definition itmex.h:37