web-dev-qa-db-ja.com

Piの計算が正確かどうかをどうやって判断するのですか?

私はさまざまな方法でpiの数字を順番に与えるプログラムを実装しようとしていました。 Taylor series の方法を試しましたが、収束が非常に遅いことがわかりました(しばらくして私の結果をオンラインの値と比較したとき)。とにかく、私はより良いアルゴリズムを試しています。

だから、プログラムを書いている間、私はすべてのアルゴリズムのように、問題に行き詰まった。私が計算したnname__の数字が正確であることをどうやって知るのか?

751
Ishan Sharma

私はpiのほとんどの桁の現在の世界記録保持者なので、 2セント を追加します。

実際に新しい世界記録を設定している場合を除き、一般的な方法は、計算された数字を既知の値と照合することです。それで十分簡単です。

実際、私はそれらに対する計算を検証するために数字の断片をリストするウェブページを持っています: http://www.numberworld.org/digits/Pi/


しかし、世界記録の領域に入ると、比較するものは何もありません。

歴史的に、計算された数字が正しいことを確認する標準的なアプローチは、2番目のアルゴリズムを使用して数字を再計算することです。したがって、いずれかの計算がうまくいかない場合、最後の数字は一致しません。

これは通常、必要な時間の2倍以上を行います(2番目のアルゴリズムは通常遅いため)。しかし、これは計算されていない数字と新しい世界記録の未知の領域に迷い込んだ後、計算された数字を検証する唯一の方法です。


スーパーコンピューターがレコードを設定していた時代に、2つの異なる AGMアルゴリズム が一般的に使用されていました。

これらは両方ともO(N log(N)^2)アルゴリズムであり、かなり簡単に実装できました。

しかし、最近では、状況は少し異なります。最後の3つの世界記録では、2つの計算を実行する代わりに、既知の最速の式( Chudnovsky Formula )を使用して1つの計算のみを実行しました。

Enter image description here

このアルゴリズムは実装がはるかに困難ですが、AGMアルゴリズムよりもはるかに高速です。

次に、 数字抽出のBBP式 を使用して2進数を検証します。

Enter image description here

この式を使用すると、任意の2進数を計算することなく、その前のすべての数字を計算できます。そのため、最後の数個の計算された2進数の検証に使用されます。したがって、muchは、完全な計算よりも高速です。

これの利点は次のとおりです。

  1. 高価な計算が1つだけ必要です。

欠点は次のとおりです。

  1. Bailey–Borwein–Plouffe (BBP)式の実装が必要です。
  2. 2進数から10進数への基数変換を検証するには、追加の手順が必要です。

最後の数桁を確認すると、すべての桁が正しいことを意味する理由の詳細を説明しました。しかし、計算エラーは最後の桁まで伝播するため、これは簡単にわかります。


現在、この最後のステップ(変換の検証)は実際には非常に重要です。以前の世界記録保持者の1人が実際に私たちを呼んだ tそれがどのように機能したかについて十分な説明を与える。

だから私は私のブログからこのスニペットを引き出しました:

N = # of decimal digits desired
p = 64-bit prime number

Enter image description here

10を基数とする算術演算を使用してAを計算し、2進法を使用してBを計算します。

Enter image description here

A = Bの場合、「非常に高い確率」で、変換は正しいです。


詳細については、ブログ投稿Pi-5兆桁を参照してください。

1613
Mysticial

間違いなく、あなたの目的のために(これは単なるプログラミング演習であると仮定します)、最良の方法は、Web上のpiの数字のリストに対して結果をチェックすることです。

そして、それらの値が正しいことをどのようにして知るのでしょうか?さて、アルゴリズムの実装が正しいことを証明するコンピューターサイエンスの方法があると言えます。

より実用的には、異なる人々が異なるアルゴリズムを使用し、すべてが小数点以下1000桁(数百万)に同意(数値を選択)する場合、それはあなたがそれを正しくしたという温かいあいまいな感じを与えるはずです。

歴史的に、ウィリアムシャンクスは1873年に小数点以下707桁にpiを発行しました。貧しい男、彼は528桁目から始めて間違えました。

非常に興味深いことに、1995年に アルゴリズムが公開されました piのn桁目(16進数)を直接計算するプロパティがありました以前のすべての数字を計算する必要はありません

最後に、最初のアルゴリズムがpi/4 = 1 - 1/3 + 1/5 - 1/7 + ...でなかったことを願っています。これはプログラミングが最も簡単かもしれませんが、最も遅い方法の1つでもあります。より高速なアプローチについては、 Wikipediaのpi記事 をご覧ください。

48
Larry Smith

複数のアプローチを使用して、それらが同じ答えに収束するかどうかを確認できます。またはネットからいくつかをつかみます。 Chudnovskyアルゴリズムは通常、piを計算するための非常に高速な方法として使用されます。 http://www.craig-wood.com/nick/articles/pi-chudnovsky/ /

20
argentage

テイラー級数はπを近似する1つの方法です。述べたように、それはゆっくり収束します。

テイラー級数の部分和は、πの真の値から次の項の乗数の範囲内にあることがわかります。

πを近似する他の手段は、最大誤差を計算するための同様の方法を有する。

これは数学的に証明できるためです。

あなたはsinとcosのために(かなり)速く収束するべき級数を使ってsin(pi/2)(あるいはそのことについてcos(pi/2))を計算することを試みることができます。 (さらに良いのですが、収束を早くするために、x=0に近い値を計算するには、さまざまな倍加式を使用してください。)

ところで、tan(x)にseriesを使うよりは、ブラックボックスとしてcos(x)と言う計算を使うと(たとえば、上記のようにtaylor級数を使うことができます)、ニュートンを使って根を見つけることができます。確かに優れたアルゴリズムがありますが、大量の数字を検証したくない場合はこれで十分です(そして実装するのはそれほど難しいことではありません。なぜそれが機能するのかを理解するには少し計算が必要です)。

4
user1974703