需要我的作業中的任務幫助。 他們給了我們一個計算餘弦的系列,它是: Σ(-1)^ ix^2i /(2i)! 而且任務是在C程序中通過編寫一個取角度爲x的函數並計算它的餘弦值來實現它。系列應該繼續加總,直到系列中的下一個加數小於1.0e-6(0.000001)。我這樣做,它只適用於小數字,如果我把大數字作爲角度,程序就會卡住。用加數求和來計算餘弦
#include <stdio.h>
#include <math.h>
#define PI 3.141592
double my_cos(double angle);
int main() {
double angle, radian, my_res, their_res;
printf("Please type a number... \n");
scanf("%lf", &angle);
radian = angle * (PI/180);
my_res = my_cos(radian); /* result from my custom cosine function */
their_res = cos(radian); /* result from the cos function located in the library math.h */
printf("My result is: %f \nMath.h library result is: %f \n", my_res, their_res);
return 0;
}
。
#include <math.h>
#define ACCURACY 1.0e-6
long factorial(int x);
double my_cos(double angle){
int i = 0;
double sum = 0, next_addend;
do {
next_addend = pow(-1, (i+1)) * pow(angle, 2*(i+1))/factorial(2*(i+1));
sum += pow(-1, i) * pow(angle, 2*i)/factorial(2*i);
i++;
} while (ACCURACY < fabs(next_addend));
return sum;
}
/* return the factorial of a given value */
long factorial(int x){
if (x == 0) {
return 1;
}
return(x * factorial(x - 1));
}
我想這與莫名其妙的階乘功能? 我真的很感激你的幫助..
呃,果然,'x'越大,迭代的次數就越多。 – ForceBru
你是否在調試器上運行它以查看永恆循環的位置,爲什麼? –
正如你所說,這很可能是階乘函數的一個問題,但要確定*你應該使用調試器來遍歷代碼並找出結果。即使需要很長時間,也很乏味和乏味,使用調試器對任何程序員來說都是至關重要的技能,即使在愛好層面上也是如此。 –