用while,pi逼近实现C上的无限循环
我在这个循环中遇到了一些问题。它是无限的,但我不知道是什么引起的。这是一段长代码的一部分,所以我只是发布了其中的一部分 我应该使用Machin的近似级数,它应该只有一个.001的误差范围(因此while循环上的操作)用while,pi逼近实现C上的无限循环,c,loops,while-loop,pi,C,Loops,While Loop,Pi,我在这个循环中遇到了一些问题。它是无限的,但我不知道是什么引起的。这是一段长代码的一部分,所以我只是发布了其中的一部分 我应该使用Machin的近似级数,它应该只有一个.001的误差范围(因此while循环上的操作) 在初始化is之前使用contWallis 假设您按照注释中的建议将其设置为1,则在while循环的第二次迭代中,如果((contWallis%2)!=0)的值将为false,因此您将永远不会输入该条件体,并且永远不会更改该循环迭代中任何变量的值,在下面的任何一个问题上。我已经解决了
在初始化is之前使用
contWallis
假设您按照注释中的建议将其设置为
1
,则在while循环的第二次迭代中,如果((contWallis%2)!=0)
的值将为false,因此您将永远不会输入该条件体,并且永远不会更改该循环迭代中任何变量的值,在下面的任何一个问题上。我已经解决了这个问题,我给了contWallis一个值1,它仍然不起作用,你在哪里做的?你上面的代码仍然没有初始化。现在编辑,对不起,这是我的第一个问题。也许你可以在浪费贡献者的时间之前耗尽你自己的调试工作?我不知道怎么做,这是我第一次遇到这种情况。我只是想寻求帮助我想sqrt(pow(piLeibT-(4.0*piWallis),2))>.001总是正确的。你试过调试吗?你知道怎么做吗?我真的不知道怎么做。我一直在使用类似于我代码其他部分的条件,这是唯一一次它不起作用,你应该学会如何调试。通过每次迭代检查变量的值。通过条件观察代码流。与你自己的纸质计算相比,它应该如何进行。如果你不学会调试,你将注定要问这样的问题,直到时间的尽头。你有关于教程或什么的链接吗?谢谢你,你可以在网络搜索中输入明显的关键词。有趣的是,似乎有数百万本关于编程语言的书。但是教你如何调试的好书在哪里呢。我确实感觉到你的痛苦。即使没有调试器,也可以通过将printf语句放入代码中并观察其位置和值来进行调试。无论如何,学习调试是你现在的首要任务。祝你好运!:-)
int main(void){
int opcion=0, contLeib, banderaLeib, contWallis, bandWallis;
float piLeib=0.0, sumaLeib=0.0, piLeibT=3.1415, piWallis=1.0, sumaWallis=0.0, nom, numWallis, denWallis, doble, sumaMachin=0.0, restaMachin=0.0;
bandWallis=1;
doble=1.0;
piWallis=1.0;
sumaMachin=0.0;
restaMachin=0.0;
contWallis=1;
while(sqrt(pow(piLeibT-(4.0*piWallis), 2))>.001){
if((contWallis%2)!=0){
if(bandWallis==1){
doble=contWallis*1.0;
sumaMachin= sumaMachin + 1/(doble*pow(5,doble));
restaMachin= restaMachin + 1/(doble*pow(239,doble));
bandWallis=0;
} else {
sumaMachin= sumaMachin - 1/(doble*pow(5,doble));
restaMachin= restaMachin - 1/(doble*pow(239,doble));
bandWallis=1;
}
contWallis++;
piWallis= 4.0 * (sumaMachin-restaMachin);
}
else{
contWallis++;
}
}
nom = piWallis*4.0;
printf("\n%f", nom);
return 0;
}