我写了一个小程序,以动态的方式有效地计算斐波纳契数:
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
有什么问题?什么类型的东西?
答案 0 :(得分:2)
Here尝试在“最小和最大可表示值”下找到合适的范围:)
显然,您的安装是64位,并且正如该页面所说,默认情况下文字是Int64,当发生溢出时,您会观察到“环绕行为”。换句话说,4660046610375530309 + 7540113804746346429超过了有符号64位整数(2⁶³-1)表示的最大值,因此序列中的下一个数字显示为负数。这仍然是斐波纳契数,但模2⁶⁴并且缠绕在负域中。