c - 使用 while、pi 近似在 C 上进行无限循环

标签 c loops while-loop pi

我在这个循环中遇到了一些问题。它是无限的,但我不知道是什么导致了它。这是长代码的一部分,所以我只发布其中的一部分 我应该为此使用 Machin 的近似级数,并且它应该只有 0.001 的误差范围(因此在 while 循环上进行操作)

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;
}

最佳答案

您在初始化之前使用contWallis

假设您按照注释中的建议将其设置为 1,则在 while 循环的第二次迭代中,if ((contWallis%2)!=0) 的值 将为 false,因此您永远不会输入该条件的主体,然后您将永远不会更改该循环迭代以及任何后续迭代中的任何变量的值。

关于c - 使用 while、pi 近似在 C 上进行无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26187625/

相关文章:

java - While 循环而不破坏先前的引用

ruby - ruby 中的 while 和 until 循环有什么区别?

c - semaphore.h 中信号量的 pthread API 等效项

c - 在对程序进行 n 次模拟时打印到文件(C 语言)

c - 如何使用 scanf\fscanf 读取一行并解析成变量?

json - AngularJS - 嵌套 forEach 来迭代 Json

C 将 char 转换为 int

r - 如何在R中的循环中找到最大值

jQuery 无限循环更新状态

c - 连接服务器并在c中使用系统功能时出错