2013-05-18 3 views
1

우리는 최근 미적분학에서 무한 시리즈에 대해 탐구했고, 그렇게 말하면서 나는 그걸 가지고 너무 재미있어합니다. 내가 파이썬에서 내 자신의 inverse tan infinte 시리즈를 파생시키고 pi를 얻기 위해 pi/4 * 4를 얻기 위해 1로 설정했다. 가장 빠른 알고리즘이 아니라는 것을 알고 있습니다. 제 알고리즘에 대해 논의하지 않겠습니다. 내가 토론하고 싶은 것은 어떻게 파이썬에서 매우 작은 숫자를 표현할 것인가입니다. 제가주의하는 것은 제 프로그램이 시리즈를 반복 할 때, 그것은 소수점 이하 20 자리에서 멈 춥니 다. 내가 십진수 모듈을 사용하여 시도하고 약 509로만 밀어. 난 무한 (거의) 표현 싶어요.파이썬에서 백만 분의 소수 자릿수

그런 일을 할 수있는 방법이 있습니까? 그러한 데이터를 처리 할 수있는 데이터 유형은 없다고 생각하지만, 그 방법을 보여줄 수 있다면 그 점을 높이 평가할 것입니다.

+0

가능한 중복 http://stackoverflow.com/questions/11522933/python-floating- point-arbitrary-precision-available) –

+0

소수점 이하 509 자리에서 멈춘 경우 데이터 유형이 아닌 알고리즘의 결함을 나타냅니다. –

+0

@KenWayneVanderLinde 아니, 그들은 단지 그 중 하나에 십진수 모듈을 사용하는 것이 좋습니다. –

답변

1

파이썬의 decimal module은 표현의 정확성에 영향을주는 "컨텍스트"를 지정해야합니다.

이 유형의 경우에는 gmpy2을 권장합니다. 유리수 (임의의 정밀도)에 대한 계산을 수행하고 마지막 단계에서 십진수로 변환 할 수 있습니다. 여기

는 예입니다 - 필요에 따라 자신의 알고리즘을 대체 :

import gmpy2 
# See https://gmpy2.readthedocs.org/en/latest/mpfr.html 
gmpy2.get_context().precision = 10000 
pi = 0 
for n in range(1000000): 
    # Formula from http://en.wikipedia.org/wiki/Calculating_pi#Arctangent 
    numer = pow(2, n + 1) 
    denom = gmpy2.bincoef(n + n, n) * (n + n + 1) 
    frac = gmpy2.mpq(numer, denom) 
    pi += frac 
    # Print every 1000 iterations 
    if n % 1000 == 0: 
     print(gmpy2.mpfr(pi)) 
[? 사용할 수 파이썬 부동 소수점 임의 정밀도 (의