无法从C的近似公式获得正确的输出

时间:2019-02-03 16:21:08

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double get_Pi(double accuracy)
{
    double Pi_estimate = 0;
    double increment = 0;
    double i = 0;
    int s = -1;


      while(fabs(increment) > accuracy)
     {

            increment = s*(1/(2*i+1));
              Pi_estimate = Pi_estimate + increment;
             s = -s;
             i++;
       }

       double offset = 1.0;
       Pi_estimate = Pi_estimate + offset;
       return 4*Pi_estimate;
       }



 int main()
{
   double accuracy;
     printf("\nhow accurate do you want Pi? ");
       scanf("%lf", &accuracy);
         double approx = get_Pi(accuracy);
       printf("%.10lf", approx);
        return 0;
      }

通过输入某个小数,您应该将pi设置为+或-输入的精度,但输出始终为4.00000。

2 个答案:

答案 0 :(得分:1)

您是从0而不是1开始,而不是加和减去项的分母,而是使用整数运算而不是浮点数来计算increment的新值,而您的{{1 }}循环永远不会进入,因为while从0开始。

正确的公式是:pi / 4 = sum(k-> inf)((-1)^(k + 1))/(2k-1)

所以您可以这样做:

increments

答案 1 :(得分:1)

这个问题与C++ Pi Approximation using Leibniz Formula非常相似,我相信这是您正在寻找的(尽管它是C ++问题)。

您的while循环永远不会进入,因为除非精度为负(0>精度),否则这种情况不会发生 因此您得到(Pi_estimate = 1)* 4 = 4

的结果