2014-09-07 3 views
0

Я пытаюсь напечатать последовательность Фибоначчи Benet's formula, однако мои значения неверны. Я что-то упустил?Python печать Фибоначчи не работает

import math 

def F(n): 
    return ((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5)) 

for x in range(0, 100): 
    print(F(x)) 

Результаты я получаю являются:

 
0.0 
1.0 
1.0 
2.0 
3.0000000000000004 
5.000000000000001 
8.000000000000002 --- start's going wrong here 
13.000000000000002 
21.000000000000004 
... 

Он должен иметь что-то делать с точностью. Однако использование cmath вместо math тоже не помогает.

Любая помощь будет оценена по достоинству.

+3

Вы можете использовать модуль [Десятичный] (https://docs.python.org/3.4/library/decimal.html). – TidB

+2

Кроме того, прочитайте [this] (https://docs.python.org/2/tutorial/floatingpoint.html#representation-error) – tyteen4a03

ответ

3

Возвратите результат как int, если вы беспокоитесь об этом, это всего лишь артефакт того, как вы можете представлять числа с плавающей запятой.

import math 

def F(n): 
    return int(((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))) 

for x in range(0, 15): 
    print F(x) 

Выход

0 
1 
1 
2 
3 
5 
8 
13 
21 
34 
55 
89 
144 
233 
377 
+0

Хм, похоже, это работает для более низких значений, однако я получаю ошибку переполнения, если я пытаюсь чтобы получить, например, 701-й номер. (извините за мою потенциальную глупость, я разработчик 'C#', но мне нужно выполнить произвольную математику точности. Могу ли я ошибиться?) – Ropstah

+0

@Ropstah затем использует 'long' вместо' int' – CoryKramer

+0

Я используя версию 3. Согласно некоторым другим сообщениям, разница между int и long была удалена в python 3.x? Во всяком случае, если я не выполняю вычисления и просто выполняю вычисления, то результаты также не работают ... Нужно ли мне что-то делать для Python для выполнения произвольной математики точности? – Ropstah

Смежные вопросы