今天和大家分享一个求PI的方法。

大家知道,其实我们有很多方法可以求PI的值,例如

1、PI=22/7(这里都是约等于)等......

今天分享一下这个方法

PI/4=1-1/3+1/5-1/7+.......

可以看到当项数越多,我们的到的值也越精确,但我们不能让它无限多,所以我们需要给它一个精度当某一项的绝对值小于10的负六次方时,就认为它达到了我们的需求;

通过仔细分析,我们可以发现多项式的前后项是有规律的,利用这一点我们可以动手画出流程图,这样便于我们编写程序;

有了上面的基础,我们就可以开始编写程序啦!

#include<stdio.h>

#include<math.h>//这个代码中我们需要用到数学函数中的fabs也就是绝对值函数

int main()

{

int sign = 1;//用来表示数值的符号

double pi = 0.0, n = 1.0, term = 1.0;//pi开始代表多项式的值,最后代表真正的PI的值,n代表分母term代表当前项的值

while (fabs(term) >= 1e-6)//检查当前项term的绝对值是否大于或等于10的负六次方

{

 pi = pi + term;//把当前term累加到pi中

 n = n + 2;//这是下一项的分母

 sign = -sign;//sign代表符号,下一项的符号与上一项符号相反

 term = sign / n;//求出下一项的值term

}

pi = pi * 4;//多项式的和pi乘4才是PI的值

printf("pi=%10.8f\n", pi);//输出PI的近似值

return 0;

}

​不知道大家看懂没有呢?

其实这我们可以让PI的值更加精确,只需改变循环条件即可。例如我们可以将10e-6改为10e-8,但这样运行时间会长很多,知道为什么么吗?

不妨我们计算一下这个循环中循环次数是多少,只需在代码的12行后加入i++即可(当然,我们要先声明这个变量i,然后再将它打印出来!)

改写后就变这样了:

#include<stdio.h>

#include<math.h>//这个代码中我们需要用到数学函数中的fabs也就是绝对值函数

int main()

{

int sign = 1;//用来表示数值的符号

int i = 0;

double pi = 0.0, n = 1.0, term = 1.0;//pi开始代表多项式的值,最后代表真正的PI的值,n代表分母term代表当前项的值

while (fabs(term) >= 1e-6)//检查当前项term的绝对值是否大于或等于10的负六次方

{

 pi = pi + term;//把当前term累加到pi中

 n = n + 2;//这是下一项的分母

 sign = -sign;//sign代表符号,下一项的符号与上一项符号相反

 term = sign / n;//求出下一项的值term

 i++;

}

pi = pi * 4;//多项式的和pi乘4才是PI的值

printf("pi=%10.8f\n", pi);//输出PI的近似值

printf("%d", i);//输出循环次数

return 0;

}

我们可以看到这个结果为50000次。当我们将循环条件改为1e-8时,循环次数为5000000次,是前一次的100倍,可知为什么么第二次程序运行会慢不少。

好了今天的分享就到这里,希望大家学有所获,也希望能与大家共同进步!