文档库

最新最全的文档下载
当前位置:文档库 > 用格里高利公式求π的近似值

用格里高利公式求π的近似值

用格里高利公式求π的近似值

17世纪,英国人格里高利(James Gregory )用下式计算π值,这就是格里高利公式。

请利用该公式求π的近似值,精确到最后一项的绝对值小于10–5。

?+-+-=71

51

31

14π

这是一个求累加和的问题,与2.4节例2-11相似,循环算式都是:

sum = sum + 第i 项

其中,第i 项用变量item 表示,item 的表示也和例2-11相同,在每次循环中其值都会改变。

两题的不同之处在于循环条件不一样,例2-11直接说明求前n 项和,即指定了循环的次数为n 次;而本题没有显式地给出循环次数,而是提出了精度要求。在反复计算累加的过程中,一旦某一项的绝对值小于10–5(|item |≤10–5),就达到了给定的精度,计算中止。这说明精度要求实际上给出了循环的结束条件,还需要将其转换为循环条件 |item |≥10–5,换句话说,当 |item|≥10–5时,要循环累加item 的值,直到 |item |<10–5为止。 通过上面的分析,我们明确了循环条件和循环体,并选择while 语句实现循环。 源程序

/* 用格里高利公式计算π的近似值,精度要求:最后一项的绝对值小于10 –5 */ #include

#include

/* 程序中调用绝对值函数 fabs ,需包含 math.h */ void main( )

{

int flag, t;

double item, pi; /* pi 用于存放累加和 */

/* 循环初始化 */

flag = 1;

/* 变量 flag 表示第 i 项的符号,初始为正 */ t = 1 ; /* 变量 t 表示第 i 项的分母,置第 1 项的分母为 1 */

item = 1.0; /* item 中存放第 i 项的值,初值取 1 */ pi = 0; /* 置累加和 pi 的初值为0 */

/* 当|item| ≥ 0.0001时,执行循环 */

while(fabs (item) >= 0.00001){

item = flag * 1.0 / t; /* 计算第 i 项的值 */

pi = pi + item;

/* 累加第 i 项的值 */ flag = -flag; /* 改变符号,为下一次循环做准备 */ t = t + 2; /* 分母递增2 ,为下一次循环做准备 */ }

pi = pi * 4;

/* 循环计算的结果是 pi/4 */ printf( “pi = %f\n ”, pi);

}