Des constantes numériques approximatives telles que PI (3.1415926 ...) et PHI (1.6180339 ...) à une précision arbitraire en utilisant la classe BigDecimal de Java (et analyser les résultats).
Ce projet est autorisé sous la licence du MIT.
Remarque: Ce projet nécessite un minimum de Java 14 à exécuter. Java 15 est recommandé car il s'agit de la version la plus récente à partir de la rédaction de cette documentation.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Composephi démontre algorithmiquement que peu importe les deux termes avec lesquels vous commencez, si vous générez une série de nombres en ajoutant les deux termes précédents, le rapport entre les termes consécutifs converge vers PHI (le rapport doré).
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_valuesComposePi montre 7 algorithmes différents pour approximer Pi. Le résultat est ensuite comparé à un fichier pré-compliqué d'un million de chiffres de PI (provenant d'ici) pour déterminer la précision.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> peut être un nombre ou un nom d'algorithme (insensible à la casse):| Nombre | Nom d'algorithme | Référence |
|---|---|---|
| 1 | Gregory-leibniz | [1] |
| 2 | Nilakantha | [2] |
| 3 | Newton | [3] |
| 4 | Viete | [4] |
| 5 | Wallis | [5] |
| 6 | Chudnovsky | [6] |
| 7 | Brent-Salamin (ou 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 compare les approximations, les temps d'exécution et l'utilisation de la mémoire des algorithmes implémentés dans l'itération de l'ordination par itération, imprime les résultats à un fichier output.txt , puis imprime une analyse des données à un tableau dans une sortie standard.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> est une liste séparée par des virgules de noms et de nombres d'algorithmes (voir ci-dessus pour les valeurs). --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 belowNotez que certains algorithmes sont beaucoup plus lents à calculer que d'autres. Par exemple, la formule de Viete calcule une racine carrée pour chaque itération et est donc relativement plus lente que les autres algorithmes.
Voici un exemple de sortie du programme montrant une comparaison des 10 premières itérations des 7 algorithmes implémentés. La première section montre les arguments transmis à ComputePi (avec les informations d'exécution et d'utilisation de la mémoire), et la deuxième section montre un tableau avec le nombre de chiffres précis de Pi par itération.
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
| Itérations | 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 |