Вычисление n-го числа Фибоначчи по формулам в питоне

Я вычисляю n-е число Фибоначчи, используя (а) линейный подход, и (Б)этот выражение

Код Python:

'Different implementations for computing the n-th fibonacci number'

def lfib(n):
    'Find the n-th fibonacci number iteratively'
    a, b = 0, 1
    for i in range(n):
        a, b = b, a + b
    return a

def efib(n):
    'Compute the n-th fibonacci number using the formulae'
    from math import sqrt, floor
    x = (1 + sqrt(5))/2
    return long(floor((x**n)/sqrt(5) + 0.5))


if __name__ == '__main__':
  for i in range(60,80):
    if lfib(i) != efib(i):
      print i, "lfib:", lfib(i)
      print "   efib:", efib(i)

Для n & gt; 71 Я вижу, что две функции возвращают разные значения.

Это из-за арифметики с плавающей запятой, используемой в efib ()? Если да, то целесообразно ли рассчитать число, используяматричная форма?

Ответы на вопрос(3)

Ваш ответ на вопрос