2013-09-23 1 views
4

Я пытаюсь вычислить 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

Мне нравится ваш подход к отладке здесь - вы положили «трассировщик», распечатав значение в каждом цикле, тем самым зная наверняка, где была проблема. Продвиньте меня! –

ответ

5

Похоже, после переменной 1 цикла i становится равным N + 1

удалить ; после цикла:

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

Вашего цикла продолжает выполняться без выполнения кода в блоке вы гнали в фигурных скобках { } после цикла for и для цикла просто увеличивает i до перерывов цикла. После блока кода цикла (где вы прокомментировали «проблема здесь») get выполняет с i = N + 1 значением.

Я не уверен, но у меня есть дополнительные сомнения относительно условных выражений в if(). You кодовое это что-то вроде:

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

Так x == 1 еще кода никогда не выполнится. Проверьте этот код.

 Смежные вопросы

  • Нет связанных вопросов^_^