Странные результаты расчета чисел Фибоначчи
Я написал небольшую программу для эффективного вычисления чисел Фибоначчи:
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
В чем проблема? Что-то с типами?
1 ответ
Решение
Здесь попробуйте найти соответствующий диапазон в разделе "Минимальные и максимальные представимые значения":)
По-видимому, ваша установка является 64-битной, и, как сказано на этой странице, литералы по умолчанию являются Int64, и при переполнении вы наблюдаете "обходное поведение". Другими словами, 4660046610375530309+7540113804746346429 превысил максимальное значение, представленное 64-разрядным целым числом со знаком (2⁶³-1), поэтому следующее число в последовательности оказалось отрицательным. Это все еще число Фибоначчи, но по модулю 2⁶⁴ и обернуто в отрицательную область.