/* * Calculate the sum: sum_{k=1}^\infty 1/(4k^2 - 1) * sum{k=1}^\infty 1/2*(1/(2*k - 1) - 1/(2*k + 1)) = 1/2 * * Use Cahan summation algorithm. */ #include #define N 1000000 #define NREP 12 double gregory(long n) { double s = 0., snew, del, cor, cors = 0.; long k; for (k = 1; k <= n; k++) { del = 1./((double) (4.*k*k - 1.)); snew = s + del; cor = (s - snew) + del; s = snew; cors += cor; } return(s+cors); } int main(void) { double s; int k; long n = N; for (k = 0; k <= NREP; k++) { s = gregory(n); printf("%20ld %20.14f %20.14f\n", n, s, 1./2. - s); n *= 2; } return(0); }