Andrea wrote:
> Hi,
> I need to calculate this probability P!/{n \choose p}, varying both n
> and p, n takes values in this range [512:1024] and p in [2:12].
> So i write this code in python:
> 
> def factorial(n):
>       result=1
>       if n==0: return 1
>       for i in xrange(1, abs(n)+1):
>               result = i*result
>       if n >= 0:
>               return result
>       else:
>               return -result
> def binomial(n, k):
>       assert n>0 and isinstance(n, (int, long)) and isinstance(k,
> (int,long))
>       if k < 0 or k > n:
>               return 0
>       if k == 0 or k == n:
>               return 1
>       return factorial(n) // (factorial(k) * factorial(n-k))
> 
> I want to call factorial(2)//binomial(1024,2) for example, in this way
> trivially I obtain 0 as probability, how can I obtain the probability
> forcing this division to output extremely small real numbers????
> 

'//' is floor division.

>>> 2/523776
0
>>> 2//523776
0
>>> float(2)/523776
3.8184261974584555e-006
>>> from __future__ import division
>>> 2/523776
3.8184261974584555e-006
>>> 2//523776
0
>>>

Duncan
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to