# [Rd] digamma with negative arguments (PR#6626)

maechler at stat.math.ethz.ch maechler at stat.math.ethz.ch
Tue Mar 2 17:31:10 MET 2004

```I intend to look into this :

>>>>> "cspark" == cspark  <cspark at ces.clemson.edu>
>>>>>     on Sun, 29 Feb 2004 22:15:02 +0100 (CET) writes:

cspark> Full_Name: Chanseok Park

cspark> digamma with any negative value does not give a right answer.
cspark> It gives -1.797693e+308 for any negative arguments.

cspark> For example, digamma(-1.1) gives  -1.797693e+308.

cspark> The right answer should be 10.15416

cspark> This bug can be easily fixed by using the following digamma identity.
cspark> digamma(x) = digamma(1-x) - pi/tan(pi*x) ## if x is negative

>> digamma(-1)
cspark> [1] -1.797693e+308

cspark> ## if we use the above math identity, we have the right answer
cspark> ##     for any negative arguments.
>>
>> x= -1.1
>> digamma(1-x) - pi/tan(pi*x) ## if x is negative
cspark> [1] 10.15416
>>

and there are similar "reflection formulae" for trigamma() etc.
which I'd want as well.

As a matter of fact, our internal code src/nmath/polygamma.c
uses the basic workhorse  dpsifn()  which provides "arbitrary"
derivatives of the psi() { == digamma() } function {for positive x}.

dpsifn() needs input/output arrays in general,

static void
dpsifn(double x, int n, int kode, int m, double *ans, int *nz, int *ierr)

but I think it would still be worth to remove "static", add
documentation in R-ext.texi and hence add it to the API.
Another step would be an R-level interface; maybe with
digamma(x, deriv = 0)
^^^^^^^^^
with obvious meaning and implementation.

Feedback ?
{divert from R-bugs to R-devel, please !}

Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><

```

More information about the R-devel mailing list