Pi(3.1415926 ...)やPhi(1.6180339 ...)などのおおよその数値定数は、JavaのBigdecimalクラスを使用して任意の精度になります(および結果を分析します)。
このプロジェクトは、MITライセンスの下でライセンスされています。
注:このプロジェクトでは、実行するには最低限のJava 14が必要です。 Java 15は、このドキュメントの執筆時点での最新のバージョンであるため、推奨されます。
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Computephiは、どの2つの用語から始めても、以前の2つの用語を追加して一連の数値を生成する場合、連続項間の比率がPHI(ゴールデン比)に収束することをアルゴリズム的に示します。
java ComputePhi <first-term> <second-term> <iterations> <precision> [options]
--print_steps (-p) # Print approximation for each iteration of algorithm.
--compare_values (-c) # Compare sequential iterations' results, and stop iterating early if they are equal. # The Fibonacci sequence
java ComputePhi 1 1 10 10
# The Lucas numbers (printing each step)
java ComputePhi 2 1 10 10 -p
# Go wild if you want to!
java ComputePhi 23 9001 200 1000 --print_steps
java ComputePhi 314 159 200 20000 --compare_valuesComputePiは、PIを近似するための7つの異なるアルゴリズムを示します。結果は、100万桁のPI(ここから供給)の事前計算されたファイルと比較して、精度を決定します。
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> 、数字、またはアルゴリズム名(case-inssensitive)にすることができます。| 番号 | アルゴリズム名 | 参照 |
|---|---|---|
| 1 | Gregory-Leibniz | [1] |
| 2 | ニラカンサ | [2] |
| 3 | ニュートン | [3] |
| 4 | ヴィエト | [4] |
| 5 | ウォリス | [5] |
| 6 | Chudnovsky | [6] |
| 7 | Brent-Salamin(またはGauss-Legendre) | [7] |
--all_digits (-a) # Print all digits (default only prints accurate digits).
--print_steps (-p) # Print approximation for each iteration of algorithm.
--compare_values (-c) # Compare sequential iterations' results, and stop iterating early if they are equal.
--estimate_memory_usage (-e) # Print an estimate of memory usage.
java ComputePi 1 1000 10
java ComputePi 2 1000 10 --print_steps
java ComputePi CHUDNOVSKY 10 100 --compare_values --estimate_memory_usage PialGorithMexaminerは、ComputePi Reater-by-Iterationで実装されているアルゴリズムの近似、ランタイム、およびメモリ使用量を比較し、結果をファイルoutput.txtに印刷し、標準出力のテーブルにデータの分析を印刷します。
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms>は、アルゴリズム名と数字のコンマ分離されたリストです(値については上記を参照)。 --skip_tests (-s) # Skip running the tests (only use to re-analyze already generated output data).
--print_table (-p) # Print the analysis as a table (defaults to printing results in a "key:value" format, which is more useful for large datasets). java PiAlgorithmExaminer CHUDNOVSKY,BRENT_SALAMIN 1000 2000
java PiAlgorithmExaminer 1,2,3,4,5,6,7 10 2000 --print_table # <----- outputs results shown below一部のアルゴリズムは、他のアルゴリズムよりも計算がはるかに遅いことに注意してください。たとえば、Vieteのフォーミュラは、すべての反復に対して平方根を計算するため、他のアルゴリズムよりも比較的遅いです。
これは、7つの実装されたアルゴリズムすべての最初の10回の反復の比較を示すプログラムの出力の例です。最初のセクションでは、 ComputePiに渡された引数(ランタイムとメモリの使用量情報を使用)を示し、2番目のセクションには、反復あたりのPIの正確な先頭桁の数があるテーブルが表示されます。
GREGORY_LEIBNIZ 10 2000 --print_steps --compare_values --estimate_memory_usage 0.103 seconds 1.640 KB
NILAKANTHA 10 2000 --print_steps --compare_values --estimate_memory_usage 0.027 seconds 1.652 KB
NEWTON 10 2000 --print_steps --compare_values --estimate_memory_usage 0.096 seconds 3.263 KB
VIETE 10 2000 --print_steps --compare_values --estimate_memory_usage 0.395 seconds 10.548 KB
WALLIS 10 2000 --print_steps --compare_values --estimate_memory_usage 0.017 seconds 1.647 KB
CHUDNOVSKY 10 2000 --print_steps --compare_values --estimate_memory_usage 0.133 seconds 13.305 KB
BRENT_SALAMIN 10 2000 --print_steps --compare_values --estimate_memory_usage 0.331 seconds 11.368 KB
| 反復 | GREGORY_LEIBNIZ | ニラカンサ | ニュートン | ヴィエト | ウォリス | Chudnovsky | brent_salamin |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 1 | 0 | 0 | 14 | 0 |
| 2 | 1 | 2 | 3 | 1 | 0 | 28 | 3 |
| 3 | 0 | 3 | 3 | 2 | 0 | 42 | 8 |
| 4 | 1 | 2 | 4 | 2 | 0 | 56 | 19 |
| 5 | 0 | 3 | 4 | 3 | 1 | 70 | 41 |
| 6 | 1 | 3 | 6 | 4 | 1 | 85 | 84 |
| 7 | 1 | 3 | 6 | 5 | 1 | 99 | 171 |
| 8 | 1 | 4 | 7 | 5 | 1 | 113 | 345 |
| 9 | 1 | 4 | 8 | 5 | 1 | 127 | 694 |
| 10 | 1 | 4 | 9 | 6 | 1 | 142 | 1392 |