Вычисление логарифма без математики
Я пытаюсь вычислить ln(x) по серии Тейлора. Вот мой код:
#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 ответ
Похоже после
1
переменная циклаi
становится равнымN + 1
Удалить ;
цикл после:
for(i = 1 ; i < N + 1; i++ );
^
Ваш цикл продолжает выполняться без выполнения кода в блоке, который вы поместили в фигурные скобки { }
после цикла for и for просто увеличивается i
до для разрывов петли. После блока кода цикла (где вы прокомментировали "проблема здесь") get выполняется с 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
код else никогда не выполняется. Проверьте этот код тоже.