Ungefähre numerische Konstanten wie PI (3.1415926 ...) und PHI (1,6180339 ...) bis willkürliche Genauigkeit unter Verwendung der BigDecimal -Klasse von Java (und analysieren die Ergebnisse).
Dieses Projekt ist unter der MIT -Lizenz lizenziert.
Hinweis: Dieses Projekt erfordert ein Minimum von Java 14, um zu laufen. Java 15 wird empfohlen, da es sich um die neueste Version zum Schreiben dieser Dokumentation handelt.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Computphi zeigt algorithmisch, dass das Verhältnis zwischen aufeinanderfolgenden Begriffen zu PHI (das goldene Verhältnis) konvergiert ist, unabhängig davon, mit welchen zwei Begriffen Sie beginnen, wenn Sie eine Reihe von Zahlen generieren, indem Sie die beiden vorherigen Begriffe hinzufügen.
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 zeigt 7 verschiedene Algorithmen zum Annäherung an PI. Das Ergebnis wird dann mit einer vorberechtigten Datei von einer Million Ziffern PI (von hier aus gesammelten) verglichen, um die Genauigkeit zu bestimmen.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> kann eine Zahl oder ein Algorithmus-Name (Fall-unempfindlich) sein:| Nummer | Algorithmus Name | Referenz |
|---|---|---|
| 1 | Gregory-Leibniz | [1] |
| 2 | Nilakantha | [2] |
| 3 | Newton | [3] |
| 4 | Viete | [4] |
| 5 | Wallis | [5] |
| 6 | Chudnovsky | [6] |
| 7 | Brent-Salamin (oder Gauß-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 vergleicht die Annäherungen, Laufzeiten und die Speicherverwendung der in der computergestellten Iteration-durch-Iteration implementierten Algorithmen, druckt die Ergebnisse zu einer output.txt und druckt dann eine Analyse der Daten in eine Tabelle in Standardausgabe.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> ist eine von Kommas getrennte Liste von Algorithmusnamen und Zahlen (siehe oben für Werte). --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 belowBeachten Sie, dass einige Algorithmen weitaus langsamer sind als andere. Zum Beispiel berechnet die Formel von Viete eine Quadratwurzel für jede Iteration und ist daher vergleichsweise langsamer als andere Algorithmen.
Hier ist eine Beispielausgabe des Programms, das einen Vergleich der ersten 10 Iterationen aller 7 implementierten Algorithmen zeigt. Der erste Abschnitt zeigt die an ComputePi übergebenen Argumente (mit der Laufzeit- und Speicherverbrauchsinformationen), und der zweite Abschnitt zeigt eine Tabelle mit der Anzahl der genauen führenden PI -Ziffern pro Iteration.
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
| Iterationen | 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 |