计算Pi(2)

这次使用的是Gauss-Legendre算法,具体描述在:http://en.wikipedia.org/wiki/Gauss%E2%80%93Legendre_algorithm

代码如下:

#include <stdio.h>
#include <math.h>

int gauss_legendre(int precision)
{
	double pi;
	double a, b, t, p;
	a = 1.0; b = 1 / sqrt(2); t = 1.0 / 4; p = 1.0;
	double a1, b1, t1, p1;
	int i;
	for (i = 0; i < precision; i++)
	{
		a1 = (a + b) / 2;
		b1 = sqrt(a * b);
		t1 = t - p * (a - a1) * (a - a1);
		p1 = 2 * p;
		a = a1; b = b1; t = t1; p = p1;
		pi = (a + b) * (a + b) / (4 * t);
	}
	printf("%.16f\n", pi);
	return 0;
}

int main(int argc, const char *argv[])
{
	gauss_legendre(1);
	gauss_legendre(2);
	gauss_legendre(3);
	gauss_legendre(4);
	return 0;
}

精度随着迭代次数上升。

你可能感兴趣的:(Algorithm,算法)