JuliaMath / JuliaMath/SpecialFunctions.jl
`NaN` in `digamma` caused by `_cotpi`
- Dominant language
- Julia
- Stars
- 381
- Forks
- 113
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 1
Description
The definition of `_digamma(z::ComplexOrReal{Float64})` contains the formula
https://github.com/JuliaMath/SpecialFunctions.jl/blob/cf35c580aebd3a698f1d3550e2b60ffbd73bdc0c/src/gamma.jl#L29
in which `_cotpi` is defined as
https://github.com/JuliaMath/SpecialFunctions.jl/blob/cf35c580aebd3a698f1d3550e2b60ffbd73bdc0c/src/gamma.jl#L63
For large complex arguments, `_cotpi` produces `NaN` since `cospi` and `sinpi` produce `Inf`. For example,
```
julia> cospi(500 * exp(im * 3pi/4))
Inf - Inf*im
julia> sinpi(500 * exp(im * 3pi/4))
Inf + Inf*im
julia> cospi(500 * exp(im * 3pi/4)) / sinpi(500 * exp(im * 3pi/4))
NaN + NaN*im
```
Nevertheless, the ordinary `cot` gives the correct answer
```
julia> cot(pi * 500 * exp(im * 3pi/4))
0.0 - 1.0im
```
A way to avoid `NaN` is to define `cotpi` as in `mpmath`
https://github.com/mpmath/mpmath/blob/b600dbcabf4b7406a61e82b9e607f754a9f12ff9/mpmath/libfp.py#L153-L161
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.