5-15 计算圆周率

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

\(\frac{\pi}{2} = 1+\frac{1}{3} + \frac{2!}{3\times 5}+ \frac{3!}{3\times 5\times 7}+\cdots + \frac{n!}{3\times 5\times 7\times \cdots \times (2n+1)}+\cdots\) ​

输入格式:

输入在一行中给出小于1的阈值。

输出格式:

在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:

0.01

输出样例:

3.132157

解题思路:

  • 程序的实现不难,分子,分母,累加和分开设置即可。
  • 主要卡在数据点上。如果对数据的精度要求较高,计算结果的式子应该全为 double 型,即使有些变量(说的是参与除了加减之外的情况)只需要 int 型,也需要定义成 double 型。

解题代码:

#include<stdio.h>

int main ()
{
	double threshold;
	scanf("%lf", &threshold);
	
	double fact = 1; // fact 要定义为 double,不然会导致精度降低 
	int i = 1;
	double de = 1.0;
	double threshold_calc;
	double pi_half = 1.0;
	
	do {
		fact = fact * i;
		de = de * (2 * i + 1);
		i++;
		pi_half = pi_half + fact / de;
		threshold_calc = fact / de;
	} while (threshold_calc >= threshold);
	
	printf("%f\n", pi_half * 2.0);
	
	return 0;
}
posted @ 2016-08-03 20:37  文之  阅读(536)  评论(0编辑  收藏  举报