4

Taylor級数で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が equalN + 1になり、その後は何も起こらないようです。なぜそうなのか、何か考えはありますか?

4

1 に答える 1

5

1サイクル変数iが等しくなった後のようですN + 1

;for ループの後を削除します。

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

for ループの後に中かっこに入れたブロック内のコードを実行せずにループが実行され続け、 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 
 }

したがって、 for x== 1else コードは実行されません。このコードもチェックしてください。

于 2013-09-23T14:30:43.337 に答える