# Integrand produced a NaN. Domain error using QuadGK

**URL:** https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287
**Category:** General Usage
**Tags:** quadgk, integral
**Created:** [April 30, 2021, 2:45am UTC](https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287 "2021-04-30T02:45:51Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![leopdsf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leopdsf/32/31008_2.png) [@leopdsf](https://discourse.julialang.org/u/leopdsf)
#### Post date: [April 30, 2021, 2:45am UTC](https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287/1 "2021-04-30T02:45:51Z")

</div>

Hello, everyone. I’m trying to solve numerically the following integral:

\int \_{-\infty} ^{\infty} \exp(-z^2/2)\ln(2\cosh(z)) dz = 2.67636.

For that, I write the following

```julia
using QuadGK

f3(z) = exp(-z^2/2)*log(2*cosh(z))
V = quadgk(f3,-Inf,Inf)

```

but I receive the following error message

```julia
DomainError with -0.9375:
integrand produced NaN in the interval (-1.0, -0.875)

```

I’m not being able to understand why I receive this, since the integral converge. Can anyone help?

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [April 30, 2021, 2:50am UTC](https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287/2 "2021-04-30T02:50:31Z")

</div>

Your integrand evaluates to `0.0 * Inf` for large `z`, due to underflow+overflow, which gives `NaN`.

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [April 30, 2021, 3:33am UTC](https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287/3 "2021-04-30T03:33:11Z")

</div>

You can avoid the `NaN` problem if you refactor `log(2*cosh(z))` in a way that avoids spurious overflow via the identity (for real z): \ln(2\cosh(z)) = |z| + \ln(1 + e^{-2|z|}):

```julia
log2cosh(z) = let za = abs(z); za + log1p(exp(-2za)); end

```

Then you get:

```julia
julia> quadgk(z -> exp(-z^2/2) * log2cosh(z), -Inf, Inf)
(2.676363074319933, 1.5888091489219617e-8)

```

---

<div class="post-metadata">

### Author: ![leopdsf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leopdsf/32/31008_2.png) [@leopdsf](https://discourse.julialang.org/u/leopdsf)
#### Post date: [April 30, 2021, 3:37am UTC](https://discourse.julialang.org/t/integrand-produced-a-nan-domain-error-using-quadgk/60287/4 "2021-04-30T03:37:10Z")

</div>

Thank you very much!!!
