计算Fibonacci数的奇怪结果

问题描述 投票:0回答:1

我写了一个小程序,以动态的方式有效地计算斐波纳契数:

function fib3(n)
    if n < 2
        return n
    else
        a = 0
        b = 1
        c = 0
        for i=2:n
            c = a + b
            a = b
            b = c
        end
        return b
    end
end
for n=1:110
    println(n,"\t",fib3(n))
end

对于大数字我得到一个奇怪的结果:

90  2880067194370816120
91  4660046610375530309
92  7540113804746346429
93  -6246583658587674878
94  1293530146158671551
95  -4953053512429003327
96  -3659523366270331776
97  -8612576878699335103
98  6174643828739884737
99  -2437933049959450366
100 3736710778780434371

问题是什么?什么类型的东西?

julia
1个回答
2
投票

Here尝试在“最小和最大可表示值”下找到合适的范围:)

显然,您的安装是64位,并且正如该页面所说,默认情况下文字是Int64,当发生溢出时,您会观察到“环绕行为”。换句话说,4660046610375530309 + 7540113804746346429超过了有符号64位整数(2⁶³-1)表示的最大值,因此序列中的下一个数字显示为负数。这仍然是斐波纳契数,但模2⁶⁴并且缠绕在负域中。

© www.soinside.com 2019 - 2024. All rights reserved.