2014-09-07 3 views
0

피보나치 시퀀스 Benet's formula을 인쇄하려고하는데, 내 값이 올바르지 않습니다. 내가 여기서 뭔가를 놓치고 있니? 내가지고있어피보나치의 파이썬 인쇄가 작동하지 않습니다.

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 
... 

그것은 정밀 함께 할 수있는 뭔가가 있어야합니다. 그러나 math 대신 cmath을 사용하면 도움이되지 않습니다.

도움을 주시면 감사하겠습니다.

+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는'int' 대신'long'을 사용한다. – CoryKramer

+0

나는 다른 게시물에 따르면 int와 long의 차이점은 python 3.x에서 제거 되었습니까? 어쨌든, 내가 캐스트를하지 않고 계산을 수행한다면, 결과 또한 꺼집니다 ... 임의의 정밀도 연산을 수행하기 위해 파이썬에 특별한 것을해야합니까? – Ropstah