gpt4 book ai didi

python - 计算双阶乘时出现问题 : computer or code?

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:11 27 4
gpt4 key购买 nike

我正在使用 Python 3 编写一个计算器应用程序,一切都运行良好(我认为),除了当我尝试使用 double_factorial() 函数时。如果我输入的数字大于 3,程序不会输出任何内容,并且我的计算机会过热(我使用 Macbook Pro,完全定制为尽可能强大)。这要么是一个直接的计算机问题,要么是由于我的代码有问题而导致的计算机问题。我的代码是否有任何我作为初学者可能无法发现的问题? (注意:我只发布相关部分):

def add(a,b):
return(a + b)

def subtract(a,b):
return(a - b)


def multiply(a,b):
counter = 0
for i in range(a):
counter = add(counter, b)
return(counter)

def divide(a,b):
quotient = 0
while a >= b:
quotient = add(quotient, 1)
a = subtract(a,b)
return (quotient, a)

def factorial(a):
c = 1
while a > 1:
c = multiply(c,a)
a = subtract(a,1)
return(c)

def double_factorial(a):
og = factorial(a)
return factorial(og)

def equation():
d = None
print("Valid operations: +, -, *, /, !, !!, =")
c = eval(input("Integer: "))

while d != "=":
d = input("Operation: ")

if d in ('+', '-', '*', '/', '!', '!!', '='):
if d == "+":
c = add(c, eval(input("Integer: ")))
elif d == "-":
c = subtract(c, eval(input("Integer: ")))
elif d == "*":
c = multiply(c, eval(input("Integer: ")))
elif d == "/":
c = divide(c, eval(input("Integer: ")))
elif d == "!":
c = factorial(c)
elif d == "!!":
c = double_factorial(c)
elif d != "=":
print("invalid")
print(str(c))

最佳答案

4!! = 24!这是一个巨大的数字(粗略估计:24!> 24 * 5^5 * 10^14,这意味着4!!〜10^20,已经接近sys.maxsize。

下一个,5! = 120!这是非常大的。 (120!>> 10^90 * 100^20 ~ 10^130)。

如果您提供乘法函数的代码,可能有助于检测究竟发生了什么(理论上,Python3 可以成功计算例如 10^100),但我怀疑您的计算机已经达到了极限。

更新:既然您已经提供了代码,那么至少还有一个潜在的问题:在您的乘法方法中,您使用 range(a),它实际上在内存中实例化了请求的序列。假设每个 int 4 个字节,则至少需要 a*4 个字节。例如。如果您的机器有例如1TB 可用内存(它可能没有)这已经会限制 a 的值:a < 10^12/4。

此外,您的“a”是相乘值中较大的一个,因此更改发送到相乘的操作数的顺序也会有所帮助,因为这样范围会更小(对应于 n! 而不是部分计算的 n! !)

您可以通过使用 xrange(一个序列迭代器)来缓解这种情况。

关于python - 计算双阶乘时出现问题 : computer or code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46757534/

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