ISO module for binomial coefficients, etc.
Alf P. Steinbach
alfps at start.no
Sun Jan 24 07:55:50 EST 2010
* Dave Angel:
> kj wrote:
>> Before I go off to re-invent a thoroughly invented wheel, I thought
>> I'd ask around for some existing module for computing binomial
>> coefficient, hypergeometric coefficients, and other factorial-based
>> combinatorial indices. I'm looking for something that can handle
>> fairly large factorials (on the order of 10000!), using floating-point
>> approximations as needed, and is smart about optimizations,
>> memoizations, etc.
>>
>> TIA!
>>
>> ~K
>>
>>
> You do realize that a standard. python floating point number cannot
> possibly approximate a number like 10000!
I think what kj is looking for, provided she/he is knowledgable about the
subject, is code that does something like
>>> from math import *
>>> log_fac = 0
>>> for i in range( 1, 10000+1 ):
... log_fac += log( i, 10 )
...
>>> print( "10000! = {}e{}".format( 10**(log_fac % 1), int( log_fac ) ) )
10000! = 2.84625968062e35659
>>> _
which turned out to be accurate to 10 digits.
> Better use longs.
That would involve incredible overhead. E.g., how many bytes for the number
above? Those bytes translate into arithmetic overhead.
> I'd check out the gamma function, which matches factorial for integer
> arguments (plus or minus 1).
Or, e.g., logarithms... ;-)
Cheers & hth.,
- Alf
More information about the Python-list
mailing list