아래 코드에서 사용하는 알고리즘/공식은 무엇입니까?다음 Java 코드는 Pi의 자릿수를 어떻게 계산 했습니까?
/**
* Computes the nth digit of Pi in base-16.
*
* If n < 0, return -1.
*
* @param n The digit of Pi to retrieve in base-16.
* @return The nth digit of Pi in base-16.
*/
public static int piDigit(int n) {
if (n < 0) return -1;
n -= 1;
double x = 4 * piTerm(1, n) - 2 * piTerm(4, n) -
piTerm(5, n) - piTerm(6, n);
x = x - Math.floor(x);
return (int)(x * 16);
}
private static double piTerm(int j, int n) {
// Calculate the left sum
double s = 0;
for (int k = 0; k <= n; ++k) {
int r = 8 * k + j;
s += powerMod(16, n-k, r)/(double) r;
s = s - Math.floor(s);
}
// Calculate the right sum
double t = 0;
int k = n+1;
// Keep iterating until t converges (stops changing)
while (true) {
int r = 8 * k + j;
double newt = t + Math.pow(16, n-k)/r;
if (t == newt) {
break;
} else {
t = newt;
}
++k;
}
return s+t;
}
이 코드는 이미 우리 문제 세트에 포함되어 있습니다. 어떤 알고리즘/공식을 사용하고 있는지 궁금합니다. 나는이 알고리즘이 단순한 알고리즘이라고 생각하지만이 코드만을 기반으로 수식을 찾을 수는 없습니다.
확인 :
![Formula to calculate the Nth digit of pi](https://i.stack.imgur.com/4P2jE.png)
베일리의 홈페이지를 참조하십시오. 알고리즘에 대해 자세히 설명하지는 않겠지 만이 주제에서는 pi iterativly http://stackoverflow.com/questions/39395/how-do-i-calculate-pi-in-c를 계산하는 방법을 보여줍니다. 경우에 따라 다른 반복 알고리즘이 있습니다. – gregory561이것은 다소 임의적이지만'piTerm()'에서 사용되는'powerMod()'함수에 대한 코드를 가지고 있습니까? –