5

純粋な興味から、プロセスの結果の後に数値が生成されるのではなく、プロセス自体が生成されているときに数値が表示されるように、PI を順次作成する方法に興味があります。この場合、数値はそれ自体で生成される可能性があり、以前に見た数値にガベージ コレクションを実装して、無限級数を作成することができます。結果は、一連の Pi に続く毎秒生成される数値です。

インターネットをふるいにかけたときに見つけたものは次のとおりです。

これは、コンピューターに適した人気のあるアルゴリズムである The Machin-like Algorithm です。

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)
4

2 に答える 2

4

おそらく、16進数で作業できますか?David Bailey、Peter Borwein、Simon Plouffe は、円周率の 16 進展開で、小数点以下 n 桁目の式を発見しました。

式は次のとおりです。

円周率の 16 進展開
(出典:sciencenews.org

詳細については、こちらをご覧ください: http://www.andrews.edu/~calkins/physics/Miracle.pdf

基数 10 にそのような式が存在するかどうかという問題は、まだ未解決です。

詳細: http://www.sciencenews.org/sn_arc98/2_28_98/mathland.htm

于 2010-06-29T05:10:16.387 に答える
4

「Moron's」の答えを拡張するには: Bailey-Borwein-Plouffe 式が行うことは、前のすべての数字を計算することなく、pi の 2 進数 (または同等の 16 進数) を計算できることです。この式は、 10 年前に pi の 1000 兆ビット目を計算するために使用されました。それは 0 です。

これは、pi のビットまたは桁を計算するための低メモリの動的アルゴリズムと同じではありません。これは、「順次」とは何を意味するのかと思います。BPPアルゴリズムは部分的な解決策と見なすことができますが、基数10または基数2でそれを行う方法を知っている人は誰もいないと思います。

ええと、円周率の反復式の一部は、各ラウンドでより多くの桁を生成する反復があるという意味で、シーケンシャル アルゴリズムのようなものでもあります。ただし、通常は各ステップで桁数が 2 倍または 3 倍になるため、これも部分的な解決策にすぎません。それで、あなたはしばらくの間、たくさんの数字を待っていました。

実際、標準的な無理数の数字を生成するための、低メモリで効率的なアルゴリズムがあるかどうかはわかりません。e の場合でも、標準の無限級数は効率的な式であり、メモリが少ないと考えるでしょう。しかし、最初はメモリが少ないように見えるだけで、実際には e の多くの桁を計算するためのより高速なアルゴリズムもあります。

于 2010-06-29T06:10:57.833 に答える