많은 자리수를 다운로드 할 수있는 곳은 어디입니까? [닫은]


11

많은 양의 pi를 어디서 찾을 수 있습니까? 나는 PiFast (와인에서 잘 작동 함)를 사용하여 이미 141 억을 계산했습니다.

느린 다운로드 속도는 신경 쓰지 않습니다.


2
원격 실용적 목적을 위해서라도 또는 ...을 위해 필요합니까? 나는 요점을 볼 수 없으므로 그냥 궁금하다.
Rook

2
@Idigas : 파이를 만들지 않습니까?
Nosredna

곧 나는 파이 계산을위한 알고리즘을 찾을 수 있습니다, 나는 당신이 원하는만큼 계산하기 위해 뭔가 쓸거야 ...
RCIX

2
계속해서 질문에 대한 새로운 답변을 받아들이십시오. 원래 수락 된 답변에는 더 이상 존재하지 않는 단일 링크가 있으므로 삭제되었습니다. 중재자에게 질문이 있으면 계속해서 질문에 표시하십시오.
Troggy

답변:


9

신경 쓰지 않는다고 말하지만 CPU가 네트워크 카드가 다운로드 할 수있는 보다 빠르게 CPU를 계산할 수 있다고 생각 합니다.

마지막 자리와이를 생성하는 데 사용 된 계산기의 현재 상태가 주어지면 다음 자리는 일정한 시간에 찾을 수 있습니다. 다음 프라임을 찾는 것처럼 점점 더 어려워지지는 않습니다.


그렇습니다.하지만 많은 CPU 시간을 소비해야하므로 모든 CPU 시간이 아닌 일부 대역폭을 사용하는 것이 좋습니다.
bgw

@Joel : 그건 그렇고, 그 알고리즘에 대한 포인터를 보여줄 수 있습니까? (그래, 나는 더 SO 내용처럼 알고 있지만, 우리가 여기 있기 때문에 ...)
R. 마르틴 페르난데스


수학은 저를 넘어서지 만 위키피디아에서 아래로 내려 가며 시리즈 중 하나는 "항당 14 자리 숫자를 전달합니다"라고합니다.
Joel Coehoorn

죄송합니다, 잘못된 링크 : numbers.computation.free.fr/Constants/PiProgram/algo.html , 그것은 프레임에있었습니다
bgw

4

Joel의 의견에 덧붙여 SuperPi 는 가장 널리 사용되는 도구 중 하나입니다. 스트레스 테스트에도 사용됩니다.


PiFast가 더 빠릅니다.
bgw 2009

4

우분투에서는 sudo apt-get install pi

그리고:

$ pi 100 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

계산할 자릿수에 따라 임의의 정밀도를 계산합니다.


0

Python을 사용하여 계산하려면 다음과 같이 매우 빠른 방법이 있습니다 (Python 및 gmpy2 라이브러리 사용).

http://www.craig-wood.com/nick/articles/pi-chudnovsky/

다음은 약간의 수정이있는 코드입니다.

"""
Python3 program to calculate Pi using python long integers, binary
splitting and the Chudnovsky algorithm

See: http://www.craig-wood.com/nick/articles/pi-chudnovsky/ for more
info

Nick Craig-Wood <nick@craig-wood.com>
"""

import math
from gmpy2 import mpz
from time import time
import gmpy2

def pi_chudnovsky_bs(digits):
    """
    Compute int(pi * 10**digits)

    This is done using Chudnovsky's series with binary splitting
    """
    C = 640320
    C3_OVER_24 = C**3 // 24
    def bs(a, b):
        """
        Computes the terms for binary splitting the Chudnovsky infinite series

        a(a) = +/- (13591409 + 545140134*a)
        p(a) = (6*a-5)*(2*a-1)*(6*a-1)
        b(a) = 1
        q(a) = a*a*a*C3_OVER_24

        returns P(a,b), Q(a,b) and T(a,b)
        """
        if b - a == 1:
            # Directly compute P(a,a+1), Q(a,a+1) and T(a,a+1)
            if a == 0:
                Pab = Qab = mpz(1)
            else:
                Pab = mpz((6*a-5)*(2*a-1)*(6*a-1))
                Qab = mpz(a*a*a*C3_OVER_24)
            Tab = Pab * (13591409 + 545140134*a) # a(a) * p(a)
            if a & 1:
                Tab = -Tab
        else:
            # Recursively compute P(a,b), Q(a,b) and T(a,b)
            # m is the midpoint of a and b
            m = (a + b) // 2
            # Recursively calculate P(a,m), Q(a,m) and T(a,m)
            Pam, Qam, Tam = bs(a, m)
            # Recursively calculate P(m,b), Q(m,b) and T(m,b)
            Pmb, Qmb, Tmb = bs(m, b)
            # Now combine
            Pab = Pam * Pmb
            Qab = Qam * Qmb
            Tab = Qmb * Tam + Pam * Tmb
        return Pab, Qab, Tab
    # how many terms to compute
    DIGITS_PER_TERM = math.log10(C3_OVER_24/6/2/6)
    N = int(digits/DIGITS_PER_TERM + 1)
    # Calclate P(0,N) and Q(0,N)
    P, Q, T = bs(0, N)
    one_squared = mpz(10)**(2*digits)
    #sqrtC = (10005*one_squared).sqrt()
    sqrtC = gmpy2.isqrt(10005*one_squared)
    return (Q*426880*sqrtC) // T

# The last 5 digits or pi for various numbers of digits
check_digits = {
        100 : 70679,
       1000 :  1989,
      10000 : 75678,
     100000 : 24646,
    1000000 : 58151,
   10000000 : 55897,
}

if __name__ == "__main__":
    digits = 100
    pi = pi_chudnovsky_bs(digits)
    print(pi)
    #raise SystemExit
    for log10_digits in range(1,9):
        digits = 10**log10_digits
        start =time()
        pi = pi_chudnovsky_bs(digits)
        print("chudnovsky_gmpy_mpz_bs: digits",digits,"time",time()-start)
        if digits in check_digits:
            last_five_digits = pi % 100000
            if check_digits[digits] == last_five_digits:
                print("Last 5 digits %05d OK" % last_five_digits)
                open("%s_pi.txt" % log10_digits, "w").write(str(pi))
            else:
                print("Last 5 digits %05d wrong should be %05d" % (last_five_digits, check_digits[digits]))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.