R S*_*ohn 1 python precision wolfram-mathematica numpy binomial-coefficients
我正在将以下 python 计算的结果与 Mathematica 进行比较:https://www.wolframalpha.com/input ?i=sum+%28500+choose+r+%29%28-1%29%5Er+%2F%28r%21 %29+%2C+r%3D0+至+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)]))
Run Code Online (Sandbox Code Playgroud)
尽管我通过模块在 python 代码中设置了任意精度,但这两个计算都给出了几乎相同的值,i = 400但之后未能收敛decimal。用 Mathematica 计算似乎是正确的。我想知道,对于更大的数据,我们怎样才能在 python 中得到与 Mathematica 相同的结果呢i?
小智 5
问题是你的阶乘中有exact=False。
>>> 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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |