"Raven" <[EMAIL PROTECTED]> writes: > The problem with Stirling's approximation is that I need to calculate > the hypergeometric hence the factorial for numbers within a large range > e.g. choose(14000,170) or choose(5,2)
Stirling's approximation to second order is fairly accurate even at low values: from math import log,exp,pi def stirling(n): # approx log(n!) return n*(log(n)-1) + .5*(log(2.*pi*n)) + 1/(12.*n) >>> for n in range(1,6): print n, exp(stirling(n)) ... 1 1.00227444918 2 2.00065204769 3 6.00059914247 4 24.0010238913 5 120.002637086 >>> To third order it's even better: from math import log,exp,pi def stirling(n): # approx log(n!) return n*(log(n)-1) + .5*(log(2.*pi*n)) + 1/(12.*n) - 1/(360.*n*n*n) >>> for n in range(1,6): print n, exp(stirling(n)) ... 1 0.999494216712 2 1.99995749743 3 5.99998182863 4 23.9999822028 5 119.999970391 >>> Reference: http://en.wikipedia.org/wiki/Stirling's_approximation -- http://mail.python.org/mailman/listinfo/python-list