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

我是 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 代码中,只有当 x20 时程序永远不会结束。

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

最佳答案

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

https://stackoverflow.com/questions/73675397/

相关文章:

php - 在创建 PHP 类实例时运行代码?

asp.net - 在 .net 中,是否有与 Server.HTMLEncode() 相反的函数?

r - 如何提取R中的第一个字符串

regex - 字符串末尾的正则表达式 _#

php - 寻找一个新的适用于 Windows 的轻量级 php 编辑器

sql - 如何在 SQL Server 2005 数据库中使用 T-SQL 用零填充 NVARCH

.net - 不可变对象(immutable对象)的约定

php - 网页如何在下次登录时记住您?

perl - 为什么 Scalar::Util::Numeric 安装不正确?

perl - 如何将 Data::Dumper 输出转换回 Perl 数据结构?