Где скачать много цифр пи?

4139
bgw

Где я могу найти большое количество цифр числа пи? Я уже подсчитал 3,14 миллиарда, используя PiFast (хорошо работает под вином).

Меня не волнует медленная скорость загрузки.

11
Вам это нужно для каких-то даже отдаленно практических целей или просто ...? Я не вижу смысла, поэтому мне просто любопытно. Rook 14 лет назад 2
@Idigas: ты никогда не пи пи? Nosredna 14 лет назад 2
Вскоре я смогу найти алгоритм для вычисления пи, я напишу что-нибудь, чтобы вычислить столько, сколько вы хотите ... RCIX 14 лет назад 0
Идите и попробуйте принять новый ответ на ваш вопрос. В исходном принятом ответе была одна ссылка, которой больше не существует, поэтому он был удален. Если у вас есть вопросы к модераторам, отметьте вопрос. Troggy 13 лет назад 2

4 ответа на вопрос

9
Joel Coehoorn

Я знаю, что вы говорите, что вам все равно, но я серьезно подозреваю, что ваш процессор может вычислить их быстрее, чем ваша сетевая карта может их загрузить.

Учитывая последнюю цифру и текущее состояние калькулятора, использованного для ее генерации, следующая цифра может быть найдена за постоянное время. Это не становится все труднее, чем найти следующий штрих.

Да, но это очень много времени для процессора, и я бы предпочел выделить некоторую пропускную способность, а не все это время. bgw 14 лет назад 0
@Joel: кстати, вы можете показать указатель на алгоритм для этого? (Да, я знаю, что это больше похоже на SO контент, но так как мы здесь ...) R. Martinho Fernandes 14 лет назад 0
http://numbers.computation.free.fr/Constants/PiProgram/pifast.html bgw 14 лет назад 0
Математика мне не подходит, но читайте в википедии, и одна из серий, как говорят, «доставляет 14 цифр в семестр». Joel Coehoorn 14 лет назад 0
Извините, неправильная ссылка: http://numbers.computation.free.fr/Constants/PiProgram/algo.html, это было в кадрах bgw 14 лет назад 0
@Joel Это была бы формула Чудновского bgw 14 лет назад 0
5 минут, чтобы вычислить 100 м десятичных знаков на моем достаточно новом ноутбуке (используя пакет `pi` в не-виртуальной Ubuntu), 10 секунд, чтобы загрузить то же самое, что и файл размером 57 МБ. Вывод: расчет в 30 раз медленнее загрузки. Nicolas Raoul 9 лет назад 0
Это просто неправда. Ron Reiter 9 лет назад 0
4
John T

В дополнение к комментарию Джоэла, SuperPi является одним из самых популярных инструментов для этого. Он также используется для стресс-тестирования.

PiFast быстрее. bgw 14 лет назад 0
3
Janus Troelsen

На Ubuntu вы можете sudo apt-get install pi

а потом:

$ pi 100 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

Он вычисляет произвольную точность с учетом количества цифр для расчета.

0
Ron Reiter

Если вы хотите использовать 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]))