python - Julia 代码没有完成而 Python 代码完成了

标签 python julia

我是 Julia 的新手,正在尝试实现/重写我以前的一些 Python 代码作为练习。我正在使用 Project Euler problem 25 作为练习

在 Python 中我有

def fibonacci(N):
    """Returns the Nth Fibonacci Number"""
    F = [0, 1] 
    i = 0
    while i <= N-2:
        F_new = F[i] + F[i+1]
        F.append(F_new)
        i += 1
    return F[N]

N = 0 
x = 1000

while len(str(fibonacci(N))) <= x:
    if len(str(fibonacci(N))) == x:
        print(N)
        break     
    N = N + 1

它运行并在大约 6.5 秒内给出正确答案。在下面的 Julia 中尝试这样做时

function fib(N)
    F = [0, 1]
    global i = 1
    while i <= N-2
        F_new = F[i] + F[i+1]
        append!(F, F_new)
        global i += 1
    end
    return F[N]
end

N = 1
x = 1000

while length(string(fib(N))) <= x
    if length(string(fib(N))) == x
        print(N-1)
        break
    end
global N += 1
end

代码似乎“永远”运行。然而,在 Julia 代码中,只有当 x<= 20 时,代码才会完成并产生正确的答案。在 Julia 代码中,当 x>20 时程序永远不会结束。

如果它针对低于 21 的所有值运行,我不确定哪里会出错?有人可以解释错误发生的位置和原因吗?

最佳答案

默认情况下,Python 整数的大小是无限的,并且会根据需要增长。另一方面,如果在 64 位系统上,Julia 将默认为带符号的 64 位整数。 (参见 docs)当尝试计算超过 19 位长的值时,这开始溢出,因此这从 x=20 开始。为了在 Julia 中获得相同的行为,您应该对任何超过此大小的值或参数使用 BigInt 类型。

关于python - Julia 代码没有完成而 Python 代码完成了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73675397/

相关文章:

python - 在 Python 中绘制棋盘

python - 如何使用 Consul Agent CLI 创建新的 KV 条目,但前提是它们尚不存在?

performance - 为什么 Julia 使用列专业?快吗

plot - 如何在 Julia 中叠加两个图

python - 在lark语法中正确设置规则和终端之间的优先级

python - 为什么我的 "def __str__(self)"函数在 Django 中不起作用

julia - 我如何在 Julia 中编写任意连续分布,或者至少模拟一个连续分布的采样?

julia - 在 Julia GPU 代码中生成泊松分布随机数的正确方法?

julia - BLAS.axpy!比 Julia 中的 += 慢

python - 从单个列表创建不规则的列表列表