Las constantes numéricas aproximadas como PI (3.1415926 ...) y PHI (1.6180339 ...) a la precisión arbitraria utilizando la clase BigDecimal de Java (y analizar los resultados).
Este proyecto tiene licencia bajo la licencia MIT.
Nota: Este proyecto requiere un mínimo de Java 14 para ejecutar. Se recomienda Java 15, ya que es la versión más reciente a partir de la escritura de esta documentación.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
CompuTephi demuestra algorítmicamente que no importa con qué dos términos comience, si genera una serie de números agregando los dos términos anteriores, la relación entre los términos consecutivos converge a PHI (la relación dorada).
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_valuesComptePI demuestra 7 algoritmos diferentes para aproximar PI. El resultado se compara con un archivo precompinado de un millón de dígitos de PI (obtenido desde aquí) para determinar la precisión.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> puede ser un número, o un nombre de algoritmo (insensible al caso):| Número | Nombre de algoritmo | Referencia |
|---|---|---|
| 1 | Gregory-Leibniz | [1] |
| 2 | Nilakantha | [2] |
| 3 | Newton | [3] |
| 4 | Viete | [4] |
| 5 | Wallis | [5] |
| 6 | Chudnovsky | [6] |
| 7 | Brent-Salamin (o 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 compara las aproximaciones, los tiempos de ejecución y el uso de la memoria de los algoritmos implementados en la iteración de la computepi por iteración, imprime los resultados en un archivo output.txt , y luego imprime un análisis de los datos a una tabla en la salida estándar.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> es una lista separada por comas de nombres y números de algoritmos (ver arriba para los valores). --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 belowTenga en cuenta que algunos algoritmos son mucho más lentos de calcular que otros. Por ejemplo, la fórmula de Viete calcula una raíz cuadrada para cada iteración y, por lo tanto, es relativamente más lento que otros algoritmos.
Aquí hay una salida de ejemplo del programa que muestra una comparación de las primeras 10 iteraciones de los 7 algoritmos implementados. La primera sección muestra los argumentos pasados a ComputePi (con el tiempo de ejecución y la información de uso de la memoria), y la segunda sección muestra una tabla con el número de dígitos líderes precisos de PI por iteración.
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
| Iteración | 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 |