Hypergeometric distribution
Paul Rubin
http
Wed Jan 4 16:02:04 EST 2006
"Raven" <balckraven at gmail.com> 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
More information about the Python-list
mailing list