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