您可以在“圆周率的近似值”维基百科文章中查看圆周率公式。我被这个公式所吸引是因为它很紧凑并且保证了高效的计算,而且它专门用于基数 10。公式是
 pi = -3 + SUM(n=0,oo): n*(2^n)*(n!)^2/(2*n)!
我的 C 代码如下。这似乎很简单。它计算了所有的中间步骤,但它完全无法收敛。什么是错误?
#include <stdio.h>
#include <math.h>
#define sq(x)  ((x)*(x))
int nfac(int);
int main()
{
  double term, denom, sum;
  double w, x, y, z, pi;
  int n;
/* Plouffe's 1996 algorithm 
(see http://en.wikipedia.org/wiki/Approximations_of_π:  */
  sum = -3.;
  for(n=1; n <= 11; n++)
  {
    printf("n= %d\n", n);
    printf("n! = %.0f\n", w = nfac(n));
    printf("(n!)^2 = %.0f\n", x = sq(w));
    printf("2^n = %.0f\n", y = pow(2,n));
    printf("(2*n)! = %.0f\n", z = nfac(2*n));
    printf("n*2^n)*((n!)^2)/(2*n)! = %f\n", term = n*y*x/z);
    printf("sum = %f\n\n", sum += term);
  }
  printf("pi = %.10f\n\n", pi = sum); 
}
int nfac(int n)
{
  int i, nn;
  if(n==0) return 1;
  nn = 1;
  for(i=1; i<=n; i++)
    nn= i*nn;
  return nn;
}