2017-04-09 59 views
0

我創建了一個函數來計算基於泰勒系列餘弦, 只有遇到精度問題時,將其與標準庫餘弦比較。 例如,計算23我的COS得出: -0.53283 和標準庫給出: -0.53283精確問題與泰勒系列尋找餘弦

我一直在尋找的網站,並試圖找出它自己,但真不敢不知道問題是什麼! 增加trellould應爲1.0e-7時,問題就解決了。 但它應該適用於1.0e-6以及(因爲它爲我的朋友工作)

將感謝任何見解,謝謝。

#define PI 3.14159265358979323846264338327950288419716 

double my_cos(double rad){ 

int i = 0; 
double numer = 1, denom = 1;  
double x2, cos = 0;  

rad = fmod(fabs(rad),2*PI); 
x2 = pow(rad,2);  

do{ 
    cos += pow(-1,i)*(numer/denom); 
    i++; 
    numer *= x2; 
    denom *= (2*i)*(2*i-1); 
} while (numer/denom>1.0e-6); 

return cos ; 
} 

回答

1

舍入,當你調用printf

printf("%f\n", my_cos(23)); 
printf("%f\n", cos(23)); 

將打印

-0.532834 
-0.532833 

這似乎是 「錯誤」 的發生。

但 如果增加位數打印像

printf("%0.12f\n", my_cos(23)); 
printf("%0.12f\n", cos(23)); 

將打印

-0.532833931872 
-0.532833020333 

所以,你有你想要的精確度。這只是印刷,使它看起來好像有什麼不對。

+0

先生,我愛你(不敢相信我浪費了這麼多時間) –