2017-04-04 138 views
1

用戶打算給出「x」和「n」的值以便使用taylors系列近似計算cos x(您可以在此處查看其公式:http://campusdematematicas.com/wp-content/uploads/2012/05/serie-taylor-funcion-coseno.gif )其中「k」值是下面代碼中的「i」。嘗試使用泰勒公式生成cos x的值

事情是,我不知道我做錯了什麼,因爲它沒有給我cos x的正確值。

我剛剛嘗試的輸入是x = 3.14,n = 6。 它應該給我的結果是cosx = -1.00 相反,它給了我:1.14

順便說一句,它不會爲0的工作,因爲它應該讓COS(X)= 1.00, 並且它給出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

「它不給我了,因爲x的應有的價值。」是一個糟糕的問題陳述。什麼是投入,產出和預期產出?它是否適用於0?爲什麼代碼混合'float/double'? - 這只是使分析變得複雜 - 建議只使用「雙」。 – chux

+0

提供[MCVE]。請注意'factorial(2 * i)'會爲'i> 10'溢出一個64位的'unsigned long long'。 – EOF

回答

1

錯誤的初始化爲m。代碼總結了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

非常感謝你的時間 –