I was comparing the result of my following python calculation with Mathematica: https://www.wolframalpha.com/input?i=sum (500 choose r )(-1)^r /(r!) , r=0 to 500
import numpy as np
from decimal import *
import scipy.special
from scipy.special import factorial
getcontext().prec = 30
i = 500
sum(np.array([scipy.special.comb(Decimal(i), (r), exact=True)*pow(-1, r)/Decimal(factorial(r, exact=False)) for r in range(i 1)]))
Both calculations are giving almost same value until i = 400
but failing to converge after that even though I set an arbitrary precision in my python code via the decimal
module. Calculation with Mathematica seems correct. May I know, how can we get same result in python as that of Mathematica for larger i
?
CodePudding user response:
The problem is that you have exact=False in the factorial.
>>> import numpy as np
>>> from decimal import *
>>> import scipy.special
>>> from scipy.special import factorial
>>> getcontext().prec = 30
>>>
>>> i = 500
>>> sum(np.array([scipy.special.comb(Decimal(i), (r), exact=True)*pow(-1, r)/Decimal(factorial(r, exact=False)) for r in range(i 1)]))
Decimal('-7.13859062099388393889008217957')
>>> sum(np.array([scipy.special.comb(Decimal(i), (r), exact=True)*pow(-1, r)/Decimal(factorial(r, exact=True)) for r in range(i 1)]))
Decimal('0.196589352363439561009074161963')