# Log Sum Exp Issue

19 Feb 2017We often do some calculations in the log space to avoid the overflow of `float64`

. The multiplication is the addition in the log space. The addition is the LogSumExp calculation in the log space. In the beginning, we want to calculate $\alpha \times \beta$ and $\alpha + \beta$. When we calculate them in the log space, let $a=log(\alpha)$, $b=log(\beta)$,

However, when we calculate the addition $log(\alpha + \beta)$, if $a$ is more than $710$, then $exp(a)$ will be `+Inf`

in `float64`

, even the real final result is not so big. Assumed $a > b$, we can do the algebra:

Thatâ€™s why the calculation $log(1+x)$ is very important. Most of the languages give the function `Log1p(x)`

, which can calculate $log(1+x)$ more accurately without the underflow. Here is my `LogSumExp`

function in Go.

```
import "math"
func LogSumExp(a, b float64) float64 {
if a < b {
a, b = b, a
}
if math.IsInf(a, 0) {
return a
}
return a + math.Log1p(math.Exp(b - a))
}
```