2013-09-23 7 views
4

Taylor 시리즈에서 ln (x)을 계산하려고합니다. 여기 내 코드는 다음과 같습니다.math.h가없는 대수 계산

#define N 10 

float ln(float x){ 
    int i; 
    float result; 
    float xt; 
    float xtpow; 
    int sign; 
    if(x > 0 && x <= 1){ 
     xt = x - 1.0; 
     sign = -1; 
     xtpow = 1.0; 
     result = 0; 
     for(i = 1 ; i < N + 1; i++); 
     { 
      // Problem here 
      printf("%d\n", i); 
      sign = sign * (-1); 
      xtpow *= xt; 
      result += xtpow * sign/i; 
     } 
    }else if(x >= 1) 
    { 
     return -1 * ln(1.0/x); 
    } 
    return result; 
} 

문제는 내 시리즈 사이클 (위 참조)에 있습니다. 그것은 1 사이클 이후에 변수 i이 같음이되고 N + 1이되고 그 이후에 아무 일도 일어나지 않는 것 같습니다. 왜 그렇게 생각 했니?

+1

여기서 디버깅하는 방법을 좋아합니다. 각 루프의 값을 인쇄하여 "추적자"에 넣으므로 문제가 발생한 위치를 확실히 알 수 있습니다. 나로부터 Upvote! –

답변

5

1주기 변수 후 iN + 1

루프 후 ;를 제거 동일하게 것 같다 :

for(i = 1 ; i < N + 1; i++); 
          ^

루프

실행 계속 중괄호 { }을에 퍼트 블록에서 코드를 실행하지 않고 after for 루프와 for 루프는 for 루프가 끝날 때까지 i을 증가시킵니다. 루프 코드 블록 (여기서 "문제가 있습니다"라고 말한 부분)은 i = N + 1 값으로 실행됩니다.

확실치 않지만 if()에 조건식에 대한 추가 질문이 있습니다.

if(x > 0 && x <= 1){ <-- "True for x == 1" 
    // loop code 
} 
else if(x >= 1){ <-- "True for x == 1" 
     // expression code here 
} 

그래서 x == 위해 1 다른 코드가 실행되지 않는 : 당신의 코드 패턴은 같은 것입니다. 이 코드도 확인하십시오.