NumericConstantApproximator
1.0.0
使用Java的BigDecimal类(例如PI(3.1415926 ...)和PHI(1.6180339 ...))近似值数字常数(3.1415926 ...)使用Java的BigDecimal类(并分析结果)。
该项目已根据MIT许可获得许可。
注意:此项目需要至少要运行Java 14。建议使用Java 15,因为它是本文档撰写的最新版本。
javac ComputePhi.java ComputePi.java PiAlgorithmExaminer.java
Computephi以算法的形式证明,无论您从哪个术语开始,如果您通过添加两个上一个术语来生成一系列数字,则连续项之间的比率收敛到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_valuesComputepi演示了7种近似PI的不同算法。然后将结果与一百万位PI(从此处来源)的一百万个数字的预算文件进行比较,以确定准确性。
java ComputePi <algorithm> <iterations> <precision> [options]
<algorithm>可以是一个数字,也可以是算法名称(不敏感):| 数字 | 算法名称 | 参考 |
|---|---|---|
| 1 | Gregory-Leibniz | [1] |
| 2 | Nilakantha | [2] |
| 3 | 牛顿 | [3] |
| 4 | 越野 | [4] |
| 5 | 瓦利斯 | [5] |
| 6 | Chudnovsky | [6] |
| 7 | 布伦特 - 六盐(或高斯 - 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比较了在computepi itseration-tiretration中实现的算法的近似,运行时间和内存使用情况,将结果打印到file 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请注意,某些算法比其他算法要慢得多。例如,越南公式为每种迭代计算一个平方根,因此比其他算法要慢。
这是该程序的示例输出,其中显示了所有7种实施算法的前10个迭代的比较。第一部分显示了传递给ComputePi参数(带有运行时和内存使用信息),第二部分显示了一个表,其中具有PI 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 | Nilakantha | 牛顿 | 越野 | 瓦利斯 | 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 |