c语言求cos的问题

程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入精度 e 和 x,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。
cos(x) = x^0/0!-x^2/2!+x^4/4!-x^6/6!+……
要求定义并调用函数 funcos(e,x)计算 cos(x) 的值,函数形参e和x的类型均为double,函数类型是double。
输入输出示例:括号内是说明
输入:
2 (repeat=2)
0.001 0 (e=0.001, x=0)
0.0001 -3.14 (e=0.0001, x=-3.14)
输出:
sum = 1.000000
sum = -0.999999

下面是我的程序

总是有误差

帮忙看看

#include "stdio.h"
#include "math.h"
double funcos(double e, double x);
double fact(int a);
int main(void)
{
int repeat, ri;
double e, sum, x;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%le%le", &e, &x);
sum=funcos(e, x);
printf("sum = %f\n", sum);
}return 0;
}

double funcos(double e, double x){
double cos,xiang;
int a,fuhao;
cos=0,fuhao=1,a=2;
xiang=pow(x,0)/1;
while(xiang>=e){
cos=xiang*fuhao+cos;
xiang=pow(x,a)/fact(a);
a=a+2;
fuhao=fuhao*(-1);
}
return cos;

}

double fact(int a){
int i ,sum;
sum=1;
for(i=1;i<=a;i++)sum=sum*i;
return sum;
}

谢谢了

double fact(int a){

int i ;

double sum; //返回值类型是double,你这里应该定义成相同的类型才对

sum=1;

for(i=1;i<=a;i++)sum=sum*i;

return sum;

}

double funcos(double e, double x){
double dcos,xiang; //cos是math中的一个函数名,不能与之重复
int a,fuhao;

dcos=0,fuhao=1,a=0;
do{
xiang=pow(x,a)/fact(a);
dcos=xiang*fuhao+dcos;
a=a+2;
fuhao=-fuhao;
}while(xiang>=e) ; //要这样写才能精确
return dcos;
}

温馨提示:答案为网友推荐,仅供参考