4

我正在尝试通过泰勒级数计算 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变得 equal N + 1,之后什么也没有发生。你有什么想法为什么会这样?

4

1 回答 1

5

似乎在1循环变量i变得相等之后N + 1

;在 for 循环后删除:

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

您的循环继续执行而不执行您在 for 循环之后放入大括号的块中的代码,{ }而 for 循环只会递增i直到 for 循环中断。在循环代码块(您在其中评论“问题在这里”)之后执行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 
 }

所以 for x== 1else 代码永远不会执行。也检查此代码。

于 2013-09-23T14:30:43.337 回答