2017-04-04 6 views
1

ユーザーは、テイラー級数近似を使用してcos xを計算するために "x"と "n"の値を与えることを意図しています(http://campusdematematicas.com/wp-content/uploads/2012/05/serie-taylor-funcion-coseno.gif )ここで、 "k"の値は下のコードの "i"です。taylorの式を使用してcos xの値を生成しようとしています

私は間違ったことを知っていません。なぜなら、それは私にcos xの適切な値を与えないからです。

私が試した入力はx = 3.14、n = 6でした。 そして、それは私を与えることになっていた結果が代わりにcosx = -1.00 だった、それは私に与えた:ところで1.14

を、それは(X)= 1.00、 COSを与える必要があるとして、それは、0では動作しません。それはmため0.000000代わり

#include <stdio.h> 

int main(){ 
double x, n, m; 
int i = 0, j, l, k = -1; 
double g = 0.0; 
unsigned long long p = 1; 
printf("Introduce the value of x (real): "); 
scanf("%lf%*c", &x); 
m = x; 
printf("\nIIntroduce the value of n (natural): "); 
scanf("%lf%*c", &n); 

while (i <=n){ 

    for (l=1; l < (i*2); l++){ 
    m *= x; 
    } 

    for (j=1; j <= (2*i); j++){ 
     p *=j; 

    } 
    if (i%2 == 0){ 
     k = 1; 
    } 

    g += (double) (m/p)*(k); 
    p = 1; 
    k = -1;  
    m = x; 
    i++; 
} 
printf("\ncos(%.2lf) = %lf\n", x, g); 
} 
+2

"それは私のcos xの適切な値を与えるものではありません。"貧しい問題の声明です。入力、出力、および予想される出力は何ですか?それは0のために働くか?なぜコードが 'float/double'を混ぜるのですか? - 分析を複雑にするだけで、「ダブル」を提案するだけです。 – chux

+0

[MCVE]を入力してください。 'factorial(2 * i)'は、 'i> 10'に対して64ビットの' unsigned long long'をオーバーフローさせることに注意してください。 – EOF

答えて

1

間違って初期化を提供します。コードは、偶数ではなく、奇数乗の合計がxです。

// m = x; 
m = 1.0; 

出力

cos(0.00) = 1.000000 
cos(1.05) = 0.500460 // cos(60 degrees) --> 0.5 
cos(1.57) = 0.000796 // cos(90 degrees) --> 0.0 
cos(3.14) = -0.999899 
+0

ありがとうございました –

関連する問題