diff options
| author | philblunsom@gmail.com <philblunsom@gmail.com@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-06-22 20:34:00 +0000 | 
|---|---|---|
| committer | philblunsom@gmail.com <philblunsom@gmail.com@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-06-22 20:34:00 +0000 | 
| commit | efe0d24fa7dbca47825638a52f51977456153bd0 (patch) | |
| tree | 77c1d68ae29e423e1baaca6565a2455ec481955c /gi/pyp-topics/src/log_add.h | |
| parent | 42e1e2cb20c8f31d9a27bf0be5fe0846f3dde413 (diff) | |
Initial ci of gi dir
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@5 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'gi/pyp-topics/src/log_add.h')
| -rw-r--r-- | gi/pyp-topics/src/log_add.h | 30 | 
1 files changed, 30 insertions, 0 deletions
diff --git a/gi/pyp-topics/src/log_add.h b/gi/pyp-topics/src/log_add.h new file mode 100644 index 00000000..e0620c5a --- /dev/null +++ b/gi/pyp-topics/src/log_add.h @@ -0,0 +1,30 @@ +#ifndef log_add_hh +#define log_add_hh + +#include <limits> +#include <iostream> +#include <cassert> +#include <cmath> + +template <typename T> +struct Log +{ +    static T zero() { return -std::numeric_limits<T>::infinity(); }  + +    static T add(T l1, T l2) +    { +        if (l1 == zero()) return l2; +        if (l1 > l2)  +            return l1 + std::log(1 + exp(l2 - l1)); +        else +            return l2 + std::log(1 + exp(l1 - l2)); +    } + +    static T subtract(T l1, T l2) +    { +        //std::assert(l1 >= l2); +        return l1 + log(1 - exp(l2 - l1)); +    } +}; + +#endif  | 
