Вычисление фибоначчи

Мне прислали эту прекрасную нерекурсивную функцию для вычисления последовательности Фибоначчи.

alt text

Я написал немного кода на C # и смог проверить, что все числа до 1474 верны.

Проблема возникает при попытке вычислить его для 1475 и выше. Мои математические навыки на C # не подходят для того, чтобы найти другой способ. Так, Есть ли у кого-нибудь лучший способ выразить эту конкретную математическую функцию в С #? кроме традиционного способа выполнения рекурсивной функции?

Кстати, я начал использовать BigInteger в качестве возвращаемого типа. Но проблема действительно возникает при попытке возвести (1 + Math.Sqrt (5) / 2) в 1475-ю степень. Я просто не понимаю, какой тип данных мне нужен (или механизм в этом отношении), чтобы заставить это вернуться с чем-то другим, кроме Infinity.

Вот отправная точка.

private Double FibSequence(Int32 input) {
    Double part1 = (1 / Math.Sqrt(5));
    Double part2 = Math.Pow(((1 + Math.Sqrt(5)) / 2), input);
    Double part3 = Math.Pow(((1 - Math.Sqrt(5)) / 2), input);

    return (part1 * part2) - (part1 * part3);
}

И нет, это не домашнее задание. Просто «простая» задача для медленного дня.

12
задан Andrew Barber 8 May 2013 в 21:24
поделиться