2014-10-03 1 views
-2

이 루프에 몇 가지 문제가 있습니다. 그것은 무한하지만 나는 그것을 일으키는 원인을 알지 못한다. 이것은 긴 코드의 일부분이므로 일부만 게시하고 있습니다. Machin의 근사값 계열을 사용하기로했는데 .001 오류 마진 (따라서 while 루프 작업)이 있습니다.while, pi approximation을 사용하는 C의 무한 루프

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

나는'sqrt (pow (piLeibT- (4.0 * piWallis), 2))>. 001'이 항상 참이라고 생각한다. 디버깅을 시도 했습니까? 그렇게하는 법을 알고 있습니까? –

+0

나는 그렇게하는 법을 모른다. 내 코드의 다른 부분과 비슷한 조건을 사용하고 있는데 이것이 작동하지 않는 유일한 시간입니다 – kittyPancake

+0

디버깅 방법을 배워야합니다. 각 반복을 통해 변수의 값을 검사하십시오. 조건을 통해 코드의 흐름을보십시오. 어떻게해야하는지 자신의 논문 계산과 비교하십시오. 디버깅을 배우지 않으면 시간이 끝날 때까지 이런 질문을하는 것이 운명입니다. –

답변

0

is가 초기화되기 전에 contWallis을 사용합니다.

의견에서 제안하는대로 이것을 1으로 설정한다고 가정하면 while 루프의 두 번째 반복에서 if ((contWallis%2)!=0)의 값은 false가되므로 해당 조건의 본문을 입력하지 않습니다. 루프의 반복에 대한 변수 값과 그 이후의 변수 값을 절대 변경하지 않습니다.

+0

나는 이미 그것을 고쳤고 contWallis에게 1의 값을 주었다. 여전히 작동하지 않는다. – kittyPancake

+0

그리고 그걸 어디에서 했는가? 위의 코드는 아직 초기화되지 않았습니다. –

+0

지금 편집 됨, 미안하다. 내 첫 번째 질문이다. – kittyPancake