gpt4 book ai didi

python - 大数与长整数之间的除法 : how to bypass float conversion?

转载 作者:行者123 更新时间:2023-12-01 02:23:53 26 4
gpt4 key购买 nike

我需要计算非常大的数字之间的比率,如代码所示:

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.combexact 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 中,int 之间的除法默认返回 int。您可以使用 __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])))

或使用 future 的导入

from __future__ import division

关于python - 大数与长整数之间的除法 : how to bypass float conversion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com