最好不要用这种算法,因为你的x=3的时候,time是9,就要计算17的阶乘,你可以用阶乘计算器试一下,17的阶乘已经很大了,超出了int型的范围,所以结果错误,最好换一种算法
#include
#include
main()
{
double factorial(int m) ;
int n = 1,i = 1 ; /*i为计数变量*/
double sum = 0, x ,term ; /*term为每一项*/
printf ("pleaseinput x to caculate sinx:") ;
scanf("%lf",&x) ;
for(;pow(x,2*n-1)/factorial(2*n-1)>=1e-5;) /*判断最后一项是否大于1e-5*/
{
term = pow(-1,n-1) * pow (x,2*n-1) / factorial(2*n-1) ; /*计算每一项*/
sum = sum + term ;
i++ ;
n++ ;
}
sum=sum+pow (-1,n-1) *pow (x,2*n-1) / factorial(2*n-1); /*补加上最后一个小于1e-5的项*/
printf("sin(x)=%lf\ntime=%d\n",sum,i) ;
return 0;
}
double factorial(int m) /*计算阶乘 改成double类型,不然在超过13之后的数都溢出了!*/
{
double fact = 1;
if(m == 0)
return (fact);
else
{
while(m)
{
fact*= m;
m--;
}
return (fact);
}
}