Perkiraan konstanta numerik seperti PI (3.1415926 ...) dan PHI (1.6180339 ...) untuk presisi sewenang -wenang menggunakan kelas besar Java (dan menganalisis hasilnya).
Proyek ini dilisensikan di bawah lisensi MIT.
Catatan: Proyek ini membutuhkan minimal Java 14 untuk dijalankan. Java 15 direkomendasikan karena merupakan versi terbaru pada penulisan dokumentasi ini.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Computefhi menunjukkan secara algoritmik bahwa tidak peduli dua istilah yang Anda mulai dengan, jika Anda menghasilkan serangkaian angka dengan menambahkan dua istilah sebelumnya, rasio antara istilah berturut -turut menyatu dengan PHI (rasio emas).
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 menunjukkan 7 algoritma yang berbeda untuk mendekati PI. Hasilnya kemudian dibandingkan dengan file yang dihitung satu juta digit PI (bersumber dari sini) untuk menentukan akurasi.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> bisa berupa angka, atau nama algoritma (case-non-sensitive):| Nomor | Nama Algoritma | Referensi |
|---|---|---|
| 1 | Gregory-Leibniz | [1] |
| 2 | Nilakantha | [2] |
| 3 | Newton | [3] |
| 4 | Viete | [4] |
| 5 | Wallis | [5] |
| 6 | Chudnovsky | [6] |
| 7 | Brent-Salamin (atau 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 membandingkan perkiraan, runtime, dan penggunaan memori dari algoritma yang diimplementasikan dalam computePi iterasi-oleh-iterasi, mencetak hasilnya ke output.txt file.txt, dan kemudian mencetak analisis data ke tabel dalam output standar.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> adalah daftar nama dan angka algoritma yang dipisahkan koma (lihat di atas untuk nilai). --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 belowPerhatikan bahwa beberapa algoritma jauh lebih lambat untuk dihitung daripada yang lain. Sebagai contoh, formula Viete menghitung akar kuadrat untuk setiap iterasi, dan dengan demikian relatif lebih lambat dari algoritma lainnya.
Berikut adalah contoh output dari program yang menunjukkan perbandingan 10 iterasi pertama dari semua 7 algoritma yang diimplementasikan. Bagian pertama menunjukkan argumen yang diteruskan ke ComputePi (dengan info runtime dan memori), dan bagian kedua menunjukkan tabel dengan jumlah digit pi per iterasi yang akurat.
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
| Iterasi | Gregory_leibniz | Nilakantha | Newton | Viete | Wallis | 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 |