#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。
答案 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
的结果