0

計算したいものに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 全体を表示するにはどうすればよいですか?

4

1 に答える 1

2

級数の収束に関する仮定に疑問を投げかける必要があるかもしれません。この π の近似は、バーゼル問題に対するオイラーの解に依存しています。経験的に、以下の例は、多数の反復回数に対するπ 2 /6からの偏差を見つけます。ご覧のように、反復回数が 1 桁増えるごとに精度が 10 進数 1 桁しか追加されません。

コード:

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
于 2013-06-13T09:46:48.593 に答える