Constantes numéricas aproximadas como Pi (3.1415926 ...) e PHI (1.6180339 ...) para precisão arbitrária usando a classe BigDecimal de Java (e analisar os resultados).
Este projeto está licenciado sob a licença do MIT.
Nota: Este projeto requer um mínimo de Java 14 para ser executado. O Java 15 é recomendado, pois é a versão mais recente da redação desta documentação.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
O ComputEphi demonstra algoritmicamente que, independentemente dos dois termos que você começa, se você gerar uma série de números adicionando os dois termos anteriores, a proporção entre termos consecutivos converge para PHI (a proporção dourada).
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_valuesO ComputEPI demonstra 7 algoritmos diferentes para aproximar o PI. O resultado é então comparado a um arquivo pré -computado de um milhão de dígitos de PI (proveniente daqui) para determinar a precisão.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> pode ser um número ou um nome de algoritmo (insensível ao caso):| Número | Nome do algoritmo | Referência |
|---|---|---|
| 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 O PialGorithMexaminer compara as aproximações, os tempos de execução e o uso de memória dos algoritmos implementados na iteração do ComputEPI por aleragem, imprime os resultados em uma output.txt de arquivo.txt e, em seguida, imprime uma análise dos dados em uma tabela na saída padrão.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> é uma lista separada por vírgula de nomes e números de algoritmos (veja acima para 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 belowObserve que alguns algoritmos são muito mais lentos para calcular do que outros. Por exemplo, a fórmula de Viete calcula uma raiz quadrada para cada iteração e, portanto, é comparativamente mais lenta que outros algoritmos.
Aqui está um exemplo de saída do programa mostrando uma comparação das 10 primeiras iterações de todos os 7 algoritmos implementados. A primeira seção mostra os argumentos passados para ComputePi (com as informações de tempo de execução e uso de memória), e a segunda seção mostra uma tabela com o número de dígitos principais precisos do PI por iteração.
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
| Iterações | 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 |