[R] precision of gamma function

Petr Savicky savicky at praha1.ff.cuni.cz
Wed Feb 9 18:23:21 CET 2011


On Wed, Feb 09, 2011 at 05:23:27PM +0200, Chuse chuse wrote:
> Dear R users,
> 
> I have to calculate gamma functions for negative numbers beyond -171.4.
> e.x. gamma(-500.4)
> I got following:
> 
> > gamma(-170.4)
> [1] -5.824625e-308
> > gamma(-171.4)
> [1] 0
> Warning message:
> underflow occurred in 'gammafn'
> 
> I have tried to use a recursion getting values a little futher -180.
> How could I solve this problem? Thank you beforehand.

Hello.

As others pointed out, the function lgamma() should be used. If
the accuracy of double precision is not sufficient or in case
of doubt concerning accuracy in extreme cases, Rmpfr package may
be used. In this case, we get

  x <- c(-171.4, -170.4)
  y1 <- lgamma(x)
  y1

  [1] -712.5781 -707.4341

  library(Rmpfr)
  y2 <- lgamma(mpfr(x, precBits=200))
  y1 - y2

  2 'mpfr' numbers of precision  200   bits 
  [1] -8.0100329934347335532420397139357516023505624051256280109870069e-14
  [2] -1.0849741205998334826524274950211713854549088941953001164911718e-13

Hope this helps.

Petr Savicky.



More information about the R-help mailing list