大数与长整数之间的除法:如何绕过浮点数转换?
Divisions between large numbers with long integers: how to bypass float conversion?
我需要计算非常大的数字之间的比率,如代码所示:
import scipy.special
x=2000
n=range(8,x+1)
q=[]
for i in range(0,len(n)):
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.binom(n[i]//7+n[i]%7,n[i]//7))*(26**n[i])**(-1))
由于数字太大,我收到错误消息:
OverflowError: long int too large to convert to float
我怎么处理这么大的数字?
您可以将 scipy.special.comb
与 exact
kwd 一起使用,并将 *large^(-1) 替换为 /large:
import scipy.special
x=2000
n=range(8,x+1)
q=[]
for i in range(0,len(n)):
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.comb(n[i]//7+n[i]%7,n[i]//7, exact=True))/(26**n[i]))
print(q[-10:])
# [2.4714229501232675e-07, 2.4726679994684175e-07, 2.473913048813568e-07, 2.4751580981587185e-07, 2.4764031475038685e-07, 2.477648196849019e-07, 2.478893246194169e-07, 2.4801382955393194e-07, 2.4813833448844694e-07, 2.48262839422962e-07]
分裂本身似乎不是问题:
(3**100)/(4**88)
# 5.380792381981753e-06
注:以上适用于Python3。在 Python2 上,整数之间的除法默认为 return 一个整数。您可以使用 __truediv__
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.comb(n[i]//7+n[i]%7,n[i]//7, exact=True)).__truediv__((26**n[i])))
或使用未来的导入
from __future__ import division
我需要计算非常大的数字之间的比率,如代码所示:
import scipy.special
x=2000
n=range(8,x+1)
q=[]
for i in range(0,len(n)):
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.binom(n[i]//7+n[i]%7,n[i]//7))*(26**n[i])**(-1))
由于数字太大,我收到错误消息:
OverflowError: long int too large to convert to float
我怎么处理这么大的数字?
您可以将 scipy.special.comb
与 exact
kwd 一起使用,并将 *large^(-1) 替换为 /large:
import scipy.special
x=2000
n=range(8,x+1)
q=[]
for i in range(0,len(n)):
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.comb(n[i]//7+n[i]%7,n[i]//7, exact=True))/(26**n[i]))
print(q[-10:])
# [2.4714229501232675e-07, 2.4726679994684175e-07, 2.473913048813568e-07, 2.4751580981587185e-07, 2.4764031475038685e-07, 2.477648196849019e-07, 2.478893246194169e-07, 2.4801382955393194e-07, 2.4813833448844694e-07, 2.48262839422962e-07]
分裂本身似乎不是问题:
(3**100)/(4**88)
# 5.380792381981753e-06
注:以上适用于Python3。在 Python2 上,整数之间的除法默认为 return 一个整数。您可以使用 __truediv__
q.append(((n[i]-6)*26**(n[i]-7)-scipy.special.comb(n[i]//7+n[i]%7,n[i]//7, exact=True)).__truediv__((26**n[i])))
或使用未来的导入
from __future__ import division