今天和大家分享一个求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倍,可知为什么么第二次程序运行会慢不少。
好了今天的分享就到这里,希望大家学有所获,也希望能与大家共同进步!