Python comb:任何大于40的值都返回无穷大?不知道为什么

Python comb:任何大于40的值都返回无穷大?不知道为什么,python,combinatorics,infinity,Python,Combinatorics,Infinity,我正在完成一个项目euler问题,但是这个函数对于任何超过40的值都返回无穷大 from scipy.special import comb def B(x): product = 1 for i in range(x + 1): product *= comb(x, i) return product 我得到的是什么 problem_650.py:10: RuntimeWarning: overflow encountered in double_

我正在完成一个项目euler问题,但是这个函数对于任何超过40的值都返回无穷大

from scipy.special import comb
def B(x):
    product = 1
    for i in range(x + 1):
        product *= comb(x, i)
    return product
我得到的是什么

  problem_650.py:10: RuntimeWarning: overflow encountered in double_scalars
  product *= comb(x, i)
  inf
如果您能帮助解决此问题,我们将不胜感激。

尝试以下方法:

def B(x):
    product = 1
    for i in range(x + 1):
        product *= comb(x, i, exact=True)
    return int(product)

B(40)

它很可能比较慢,但当您从project Euler中执行操作时,我想您不想近似计算梳值,而是使用精确的值。

什么是梳(x,I)?您是否可以指定,如果删除
int()
转换,您会更好地理解。参见此处:
1.7976931348623157e+308
是可能的最大浮动。上面的任何内容都将是
inf
。Python的整数只受内存的限制;如果您实际上不需要浮点结果,那么使用浮点进行计算没有任何好处(除了速度)scipy@EdwardSLogsdail你注意到了吗,那把梳子上有一个旗子精确=假(false是默认值,我几乎可以肯定,如果你做了数字理论的东西,你不只是想计算近似值)很好地发现了!如果exact为False,则使用浮点精度,否则将计算精确的长整数。AnkushRasgon:是的,就是这样。我猜如果exact=False,他们使用的事实是,二项式系数可以通过正态分布近似,这是统计的深层次结果。