Как создать PI последовательно в Ruby

Из заинтересованного чистого мне любопытно, как создать PI последовательно так, чтобы вместо числа, производимого после результата процесса, позвольте числам отображаться, поскольку сам процесс сгенерирован. Если это верно, затем число могло произвести себя, и я мог реализовать сборку "мусора" на ранее замеченных числах, таким образом создающих бесконечный ряд. Результатом является просто число, сгенерированное каждую секунду, который следует за серией Pi.

Вот то, что я нашел отсеиванием через Интернет:

Это это популярный благоприятный для компьютера алгоритм, подобный Machin Алгоритм:

def arccot(x, unity)
   xpow = unity / x
   n = 1
   sign = 1
   sum = 0
   loop do
       term = xpow / n
       break if term == 0
       sum += sign * (xpow/n)
       xpow /= x*x
       n += 2
       sign = -sign
   end
   sum
end

def calc_pi(digits = 10000)
   fudge = 10
   unity = 10**(digits+fudge)
   pi = 4*(4*arccot(5, unity) - arccot(239, unity))
   pi / (10**fudge)
end

digits = (ARGV[0] || 10000).to_i
p calc_pi(digits)
5
задан Trip 29 June 2010 в 03:08
поделиться

2 ответа

Чтобы расширить ответ «дебилов»: что делает для вас формула Бейли-Борвейна-Плуффа, так это то, что она позволяет вам вычислять двоичные (или эквивалентно шестнадцатеричные) цифры числа Пи без вычисления всех цифр перед ним. Эта формула использовалась для вычисления квадриллионного бита числа пи десять лет назад. Это 0. (Я уверен, что вы были на грани того, чтобы выяснить это.)

Это не то же самое, что и динамический алгоритм с низким объемом памяти для вычисления битов или цифр числа Пи, который Я думаю, что вы могли иметь в виду под «последовательно». Я не думаю, что кто-то знает, как это сделать в базе 10 или 2, хотя алгоритм BPP можно рассматривать как частичное решение.

Что ж, некоторые из итерационных формул для числа Пи также чем-то похожи на последовательный алгоритм в том смысле, что есть итерация, которая производит больше цифр с каждым раундом. Однако это также лишь частичное решение, потому что обычно количество цифр удваивается или утраивается с каждым шагом. Так что вы подождете с большим количеством цифр какое-то время, и быстро придет намного больше цифр.

На самом деле, я не знаю, существует ли какой-нибудь эффективный алгоритм с низким объемом памяти для получения цифр любого стандартного иррационального числа. Даже для e вы могли бы подумать, что стандартный бесконечный ряд - эффективная формула и что у него мало памяти. Но он смотрит только на нехватку памяти вначале, и на самом деле есть более быстрые алгоритмы для вычисления многих цифр e.

4
ответ дан 14 December 2019 в 04:29
поделиться

Может быть, у вас получится работать с шестнадцатеричным числом? Дэвид Бейли, Питер Борвейн и Саймон Плафф открыли формулу для n-й цифры после десятичной дроби в шестнадцатеричном представлении числа пи.

Формула:

Hexadecimal expansion of pi
(источник: sciencenews.org )

Подробнее об этом можно прочитать здесь: http://www.andrews.edu/~calkins/ Physics / Miracle.pdf

Вопрос о том, существует ли такая формула для базы 10, все еще открыт.

Дополнительная информация: http://www.sciencenews.org/sn_arc98/2_28_98/mathland.htm

4
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: