回复: 大家把能找到的计算pi的程序/算法都贴在这里 来自
[url=http://hi.baidu.com/digiter/blog/item/c2b6d801c2ce6cd5277fb590.html]
#include <stdio.h>
#include <math.h>
#define PI 3.141592654
#define k 1e-7
// pi/4=1-1/3+1/5-1/7...
double pi1()
{
double sum1=0, sum2, n=1, s=1;
do
{
sum2 = sum1;
sum1 += s / n;
s *= -1;
n += 2;
}while (fabs(4 * sum1 - 4 * sum2) > k);
return 4 * sum1;
}
// pi*pi/6=1/1*1 + 1/2*2 + 1/3*3 + 1/4*4...
double pi2()
{
double n=1, sum1=0, sum2;
do
{
sum2 = sum1;
sum1 += 1 / (n * n);
n += 1;
}while (fabs(sqrt(6 * sum1) - sqrt(6 * sum2)) > k);
return sqrt(6 * sum1);
}
// pi/6=1/2 + (1/2)*(1/3)*(1/2)^3 + (1/2*3/4)*(1/5)*(1/2)^5 + (1/2*3/4*5/6)*1/7*(1/2)^7...
double pi3()
{
double sum1=0.5, sum2, i=1, a=0.5, b=1/3.0, c=0.5*0.5*0.5;
do
{
sum2 = sum1;
sum1 += a*b*c;
i += 1;
a *= ((i + i - 1)/(i + i));
b = 1 /(i + i + 1);
c *= 0.5 * 0.5;
}while (fabs(6 * sum1 - 6 * sum2) > k);
return 6 * sum1;
}
// pi/2=2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7 * 8/7 * 8/9...
double pi4()
{
double sum1=1, sum2, t=2;
do
{
sum2 = sum1;
sum1 *= t / (t - 1);
sum1 *= t / (t + 1);
t += 2;
}while (fabs(2 * sum1 - 2 * sum2) > k);
return 2 * sum1;
}
int main()
{
printf("%.9lf\n", pi1());
printf("%.9lf\n", pi2());
printf("%.9lf\n", pi3());
printf("%.9lf\n", pi4());
printf("%.9lf\n", acos(-1));
getchar();
return 0;
}
输出:
3.141592704
3.141283750
3.141592647
3.141312517
3.141592654 |