我正在尝试解决运行此系列的代码pi = 4 - 4/3 + 4/5 - 4/7 + 4/9 ......等等。问题是,当我运行更高的值时,函数趋向于4,而不是3,1415 ....程序似乎只运行n假设的最大值。我也不能使%%。lflf根据变量设置小数,(p)。该算法似乎是正确的,但几天后我急切希望得到任何帮助,非常感谢。
if ( 2 == route ) {
printf("piseries calculator\n");
double pi,n,p;
printf("define precision");
scanf("%lf",&p);
n=0;
while (n++ <= p ) {
pi = (4) - (n * ( 4 / ( 1 + 2 *(n)))) +( n * ( 4 / ( 3 + 2 * (n))));
}
printf("%%.lflf",p,pi);
return 0;
}
答案 0 :(得分:0)
我会对这些计算进行缩放
#include <stdio.h>
#define Niterations 1000
#define SCALE 1000
int main(void) {
double pi = 4.0 * SCALE;
for(unsigned i = 0; i < Niterations; i ++)
{
double f = 4.0 * SCALE / (3 + i * 2);
pi += (i & 1) ? f : -f;
}
printf("N iterations = %u, pi = %lf", Niterations, pi / SCALE);
// your code goes here
return 0;
}
结果:N iterations = 10000, pi = 3.141692643590519029572760700830258429050445556640625000000000 ...
答案 1 :(得分:0)
首先,制作n和p整数。
其次n从3开始不是吗?
第三个Pi系列是4.0( - 分数+分数)......
最后,你可以使用%。* lf来增加/限制输出的精度。
if ( 2 == route )
{
printf("piseries calculator\n");
double pi=4.0;
int n,p;
printf("define precision");
scanf("%d",&p);
for(n=3;n<p;n+=2)
{
pi -= 4.0/n;
n+=2;
pi += 4.0/n;
}
printf("%.*lf",p,pi);
return 0;
}