C语言用泰勒级数计算sinx,计算sin1,sin2都正确,sin3不正确,不知道哪里错了,求大神指导

2025-05-09 05:40:09
推荐回答(2个)
回答1:

最好不要用这种算法,因为你的x=3的时候,time是9,就要计算17的阶乘,你可以用阶乘计算器试一下,17的阶乘已经很大了,超出了int型的范围,所以结果错误,最好换一种算法

回答2:

#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);
    }
}