我写了一些测试代码,计算Pi到我想要计算的任何东西。它看起来像这样:
public static void piCalculatorMethod1() {
int iteration = 1000000;
Real pi = Real.valueOf(0);
for (int i = 1; i < iteration + 1; i++) {
Real current = pi;
Real addendum = Real.valueOf((1/Math.pow(i, 2)));
pi = current.plus(addendum);
}
pi = pi.times(6);
pi = pi.sqrt();
System.out.println(pi.toString());
}
很不幸的是,输出决定它看起来像这样:
3.14159169866
我非常确定最终值比这更准确,因为我已经看到了它们实际添加的值,并且比这更准确。
如何让System.out.println
向我展示整个Real而不仅仅是前几位?
答案 0 :(得分:2)
您可能需要质疑您对该系列的收敛性的假设。这种π的近似依赖于欧拉对Basel problem的解。根据经验,下面的示例找到了对于多次迭代计数的偏离π 2 / 6。如您所见,迭代计数中的每个数量级都会增加不超过一个十进制数字的准确度。
代码:
Real PI_SQUARED_OVER_6 = Real.valueOf(Math.pow(Math.PI, 2) / 6);
for (int p = 0; p < 7; p++) {
int iterations = (int) Math.pow(10, p);
Real pi = Real.valueOf(0);
for (int i = 1; i < iterations + 1; i++) {
pi = pi.plus(Real.valueOf(1 / Math.pow(i, 2)));
}
System.out.println("10^" + p + ": " + PI_SQUARED_OVER_6.minus(pi));
}
控制台:
10^0: 6.44934066848226E-1 10^1: 9.5166335681686E-2 10^2: 9.950166663334E-3 10^3: 9.99500166667E-4 10^4: 9.9995000167E-5 10^5: 9.999950000E-6 10^6: 9.99999500E-7