2015-01-25 2 views
-2

나는 Python 3.3.2에서 pi를 계산하는 프로그램을 만들었습니다. (재미도 조금 있지만, 내장 된 pi는 사용하고 싶지 않습니다.) 그것은 잘 작동 - 그것은 pi의 올바른 값을 소수점 이하 7 자리 가져옵니다. 그러나 일단이 점에 도달하면 프로그램은 계속되지만 값은 변하지 않습니다. 나는 decimal.Decimal를 사용하여 시도했지만 작동하지 않습니다 - 그것은 다음과 같은 오류와 함께 제공 : 내 작업 코드 (. 대신 소수의 수레를 사용) 난 단지 실제 알고리즘을 포함했다내 프로그램이 "중지"된 이유는 무엇입니까?

TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

입니다 :

pi=float(3) 
a=2 
b=0 
c=float(0) 
while 1==1: 
    b=a*(a+1)*(a+2) 
    c=4/b 
    pi=pi+c 
    print(str(pi)) 
    a=a+2 
    b=a*(a+1)*(a+2) 
    c=4/b 
    pi=pi-c 
    print(str(pi)) 
    a=a+2 

그리고 이것은 결과입니다 이 http://i.imgur.com/y0qgBMB.png

프로그램이 실제로는이보다 훨씬 이전에 작동이 중지 있습니다 (죄송합니다, 제가 직접 이미지를 게시 할 수있는 충분한 명성을하지 않는다), 그냥 왼쪽 거기에 잠시 동안. 제가 사용하고있는 알고리즘이 더 많은 소수점 이하 자리수를 찾을 수 있다는 것을 알고 있습니다. 누군가가 왜 작동하지 않는지 알려주고 가능한 해결책을 제시 할 수 있습니까? 파이썬을 너무 좋아하지 않는다는 것을 제 코드의 단순함에서 알 수 있듯이, 제가 학교에서 배운 기본 지식 만 있습니다. 간단한 솔루션을 많이 주시면 감사하겠습니다! EDIT Decimal 및 Jasper의 제안이있는 작동하지 않는 코드입니다. import decimal pi=decimal.Decimal(3) a=2 b=0 c=decimal.Decimal(0) while True: b=a*(a+1)*(a+2) c=4/b pi=pi+c print(str(pi)) a=a+2 b=a*(a+1)*(a+2) c=4/b pi=pi-c print(str(pi)) a=a+2 이 오류입니다 :

Traceback (most recent call last): File "C:\Users...\fastpi2.py", line 9, in pi=pi+c TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'

+0

'while 1 == 1'은'while True '여야합니다. 'Decimal'을 사용한다면, 어디에서나 일관되게 사용해야합니다. – Jasper

+2

그럼 당신의 질문은 무엇입니까? ''float's은 무한 정밀도를 할 수 없기 때문에 "working"코드는 무한 정밀도를 할 수 없습니다. 우리는 당신이 그것을 게시하지 않았기 때문에'Decimal'을 사용하는 작동하지 않는 코드를 당신을 도울 수 없습니다. – roippi

+0

@ 재퍼 그래서 어떻게 구현할 수 있을까요? 나는 진실을 밝히고 작동시킬 수 있을까? 아니면 변화가 필요한 다른 장소가 있습니까? – awesomeshreyo

답변

0

코드는 실패 때문에 (파이썬 3) 부동 소수점에서 두 개의 정수 결과의 부문 :

>>> from decimal import Decimal 
>>> pi = Decimal(3) 
>>> a=2 
>>> b=a * (a+1) * (a+2) 
>>> c=4/b 
>>> type(c) 
<class 'float'> 
>>> pi = pi + c 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'Decimal' and 'float' 

다음 작품 :

>>> a = Decimal(2) 
>>> one = Decimal(1) 
>>> b = a * (a+one) * (a+one+one) 
>>> c = Decimal(4)/b 
>>> type(c) 
<class 'decimal.Decimal'> 
>>> pi = pi + c 
>>> pi 
Decimal('3.166666666666666666666666667') 
+0

감사합니다. 이제 작동합니다. – awesomeshreyo

+0

그러면이 대답을 수락 할 수 있습니다. – Jasper

관련 문제