Приблизительные числовые константы, такие как PI (3.1415926 ...) и PHI (1.6180339 ...), до произвольной точности с использованием большего класса Java (и анализируют результаты).
Этот проект лицензирован по лицензии MIT.
Примечание. Для этого проекта требуется минимум Java 14. Java 15 рекомендуется, так как это самая последняя версия по состоянию на написание этой документации.
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Компьютефи демонстрирует алгоритмически, что независимо от того, с какими двумя терминами вы начинаете, если вы генерируете серию чисел, добавляя два предыдущих термина, отношение между последовательными терминами сходится к PHI (золотое соотношение).
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_valuesКомпьютер демонстрирует 7 различных алгоритмов для аппроксимации PI. Результат затем сравнивается с предварительно вычисленным файлом на миллион цифр PI (полученного отсюда) для определения точности.
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm> может быть число или имя алгоритма (нечувствительное):| Число | Имя алгоритма | Ссылка |
|---|---|---|
| 1 | ГРЕГОРИ-ЛЕЙБНИЗ | [1] |
| 2 | Нилаканта | [2] |
| 3 | Ньютон | [3] |
| 4 | Viete | [4] |
| 5 | Уоллис | [5] |
| 6 | Чудновский | [6] |
| 7 | Брент-Саламин (или Гаусс-Легендре) | [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 сравнивает приближения, время выполнения и использование памяти алгоритмов, реализованных в итерации Computepi, печатает результаты на выходной файл output.txt , а затем печатает анализ данных в таблицу в стандартном выходе.
java PiAlgorithmExaminer <algorithms> <iterations> <precision> [options]
<algorithms> представляет собой разделенный запятой список имен и номеров алгоритмов (см. Выше значения). --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 belowОбратите внимание, что некоторые алгоритмы намного медленнее, чем другие. Например, формула Viete вычисляет квадратный корень для каждой итерации и, таким образом, сравнительно медленнее, чем другие алгоритмы.
Вот пример вывода программы, показывающий сравнение первых 10 итераций всех 7 реализованных алгоритмов. В первом разделе показаны аргументы, передаваемые ComputePi (с информацией о среде выполнения и использовании памяти), а во втором разделе показана таблица с количеством точных ведущих цифр PI на итерацию.
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
| Итерации | Gregory_leibniz | Нилаканта | Ньютон | Viete | Уоллис | Чудновский | 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 |