Проблема с формулой B inet состоит в том, что вам требуется повышенная точность для выполнения вычислений, а с плавающей запятой это вам не предоставляется.
Существует несколько способов эффективного вычисления чисел Фибоначчи. Вот мой любимый, он не является (явно) итеративным и имеет примерно правильную сложность времени выполнения:
def fib(n):
X = 1<<(n+2)
return pow(X, n+1, X*X-X-1) % X
Здесь используется арифметика c с числом битов, которые линейно растут с n, что, я думаю, Это нормально, потому что число битов, полученных в результате, растет линейно.
Альтернативные подходы log (n) - использовать формулы удвоения, использовать целочисленную версию формулы B inet (обычно в алгебре * 1015). * кольцо) или матрица питания. У меня есть запись в блоге, описывающая их более подробно: https://blog.paulhankin.net/fibonacci2/