| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 122Ml 于 2020-8-17 10:45 编辑  
 
代码: 
- #include <stdio.h>
 
 - #include <math.h>
 
 - #define num 30000 
 
  
- int main()
 
 - {
 
 -         float pi=3.1415926;
 
 -         double sum=0,temp=0,a,b;
 
 -         int i;
 
 -         
 
 -         for(i=0;i<=num;i++)
 
 -         {
 
 -                 a=1+(2*i);
 
 -                 b=pow(-1,i)*4;//sum=1/(1+2*i)*pow(-1,i),这种写法有什么错误? 
 
 -                 
 
 -                 sum=1/a*b;
 
 -                 temp=temp+sum;
 
 -                 printf("%lf,%lf,%lf,%lf\n",a,b,sum,temp);
 
 -         }
 
 -         printf("pi=%.10lf",temp);
 
 -         
 
 -         return 0;
 
 - }
 
  复制代码 
结果: 
- ............................................................
 
 - 59997.000000,4.000000,0.000067,3.141626
 
 - 59999.000000,-4.000000,-0.000067,3.141559
 
 - 60001.000000,4.000000,0.000067,3.141626
 
 - pi=3.1416259858
 
 - --------------------------------
 
 - Process exited after 15.03 seconds with return value 0
 
 - 请按任意键继续. . .
 
  复制代码 
 
圆周率计算公式: 
 
 
 
求助: 
①如写 sum=1/(1+2*i)*pow(-1,i) ,错误出在哪?是优先级吗? 
②求改进精度的算法。 
程序没问题。 
精度问题是因为循环次数不够 
帮你修改一下,循环次数不限制,直接限制精度 
顺便帮你优化了一下代码
- #include <stdio.h>
 
 - #include <math.h>
 
 - #define  accuracy 0.000001 //想精确到哪一位就精确到哪一位
 
  
- int main()
 
 - {
 
 -     float pi=3.1415926;
 
 -     double sum=1,temp=0,a=-1,b=-1;
 
 -     
 
 -     while(fabs(sum)> accuracy)//想精确到哪一位就精确到哪一位
 
 -     {
 
 -         a += 2;//这样写运算更快
 
 -         b *= -1; //这样写运算更快
 
 -         
 
 -         sum = 1/a*b*4;
 
 -         temp += sum;
 
 -         printf("%lf,%lf,%.10lf,%lf\n",a,b,sum,temp);//这一句最好去掉,因为重复输出很浪费时间
 
 -     }
 
 -     printf("pi=%.10lf",temp);
 
 -     
 
 -     return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |