JuliaMath / JuliaMath/SpecialFunctions.jl

`NaN` in `digamma` caused by `_cotpi`

Open
#480 2 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.