on Tue, 15 Jul 2008 01:39:19 -0700 Raymond Hettinger wrote: > In the meantime, here's a little cheat: > > >>> from test.test_random import gamma > >>> gamma(4) > 5.9999999999999982 > >>> gamma(5) > 24.0 > >>> gamma(6) > 120.00000000000003 > >>> gamma(6.1) > 142.45194406567856
there is a simple implementation in Python at: http://en.wikipedia.org/wiki/Lanczos_approximation with coefficients slightly different from those in test_random.py, one gets: >>> gamma(4) (6.0000000000000071+0j) >>> gamma(5) (23.999999999999996+0j) >>> gamma(6) (120.00000000000021+0j) >>> gamma(6.1) (142.4519440656791+0j) >>> with the gamma from gcc under linux, which uses the MPFR library, the result is not really satisfying: >>> lgamma(4) 1.791759469228055 >>> tgamma(4) 6.0 >>> tgamma(5) 24.000000000000004 >>> tgamma(6) 119.99999999999997 >>> tgamma(6.1) 142.45194406567862 using the code from numerical recipes chap 6: >>> lgamma(4) 1.7917594692280554 >>> math.exp(lgamma(4)) 6.0000000000000027 >>> math.exp(lgamma(5)) 23.999999999999993 >>> math.exp(lgamma(6)) 119.99999999999987 >>> math.exp(lgamma(6.1)) 142.45194406567873 and from the scipy package, which uses the cephes math library: >>> from scipy.special import * >>> gamma(4) 6.0 >>> gamma(5) 24.0 >>> gamma(6) 120.0 >>> gamma(6.1) 142.45194406567867 i'll check if an appropriate choice of of a set of coefficients or extending the number of coefficients can lead to a more accurate result. nirinA -- _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com