我的代码
#include <stdio.h>
#include <math.h>
double funcos( double e, double x );
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
int digui(int n)
{
if (n == 0){
return 1;
}
else{
return n*digui(n-1);
}
}
double funcos( double e, double x )//输入e == 0.01 x = -3.14
{
int i = 0,flag = 1;
double sum_1,sum_2 = 0;//sum_1是最后一项,sum_2是和
sum_1 = flag*pow(x,i) / digui(i);
sum_2+= sum_1;
while(abs(sum_1)> e ){
flag = -flag;
i += 2;
sum_1 = flag*pow(x,i) / digui(i);
sum_2+= sum_1;
if ((abs(sum_1) < e){
printf("sum_1=%lf e = %f\n",sum_1,e);
}
}
return sum_2;
}
输入0.01 -3.14;
结果
为什么当sum_1= 0.234378 时,会被认为 sum_1 < 0.01?