C正弦(x)近似中的误差

C正弦(x)近似中的误差,c,series,C,Series,我试图用泰勒级数计算Sin(x)的值,即:x-x^3/3+x^5/5! 我尝试的是这个代码,但它给了我一些错误 int n; int factorial; float sum=0; float angle; int sign=1; int i,j; printf("Please Enter angle in degrees:\n"); scanf("%f",&angle); angle=angle*3.14/180; printf("Please Enter Number of te

我试图用泰勒级数计算Sin(x)的值,即:x-x^3/3+x^5/5! 我尝试的是这个代码,但它给了我一些错误

int n;
int factorial;
float sum=0;
float angle;
int sign=1;
int i,j;

printf("Please Enter angle in degrees:\n");
scanf("%f",&angle);
angle=angle*3.14/180;

printf("Please Enter Number of terms:\n");
scanf("%d",&n);
for (i=1;i<=n;i++){
    factorial=1;
    for (j=1;j<=(2*i-1);j++)
    factorial=factorial*j;
sum=sum+sign*(pow(angle,j)/factorial);
sign*=-1;
}
printf("Sum up to %d terms is %f",n,sum);
intn;
整数阶乘;
浮点数和=0;
浮动角;
int符号=1;
int i,j;
printf(“请输入角度,单位为度:\n”);
扫描频率(“%f”和角度);
角度=角度*3.14/180;
printf(“请输入条款编号:\n”);
scanf(“%d”和“&n”);
对于(i=1;i关闭1

j
太大了

// sum=sum+sign*(pow(angle,j)/factorial);
sum=sum+sign*(pow(angle,j-1)/factorial);

建议更好地近似pi

#define MY_PI 3.1415926535897932384626433832795
// angle=angle*3.14/180;
angle *= MY_PI/180;

在使用<代码>浮标< /代码>中没有实际值考虑“代码>双< /代码>。如果代码要与<代码>浮标保持一致,则使用<代码>浮点函数,如<代码> POWF(角度,j)< /code > -注意<代码> f < /code >


提示:不要每次从1开始重新计算项的阶乘,而是从上一个项继续计算

//psuedo code
term = -x*x/(2i)/(2i+1)*previous_term

double sum=0.0;
双x2=x_弧度*x_弧度;
双项=x_弧度;

对于(unsigned i=1;i碰巧,你使用python吗?你真的应该用浮点运算,最好是双精度运算。特别是,你要把整型参数传递给需要双精度运算的函数,并依靠编译器根据函数声明中的信息为你转换参数。这样做更清楚e数据类型显式。
  double sum = 0.0;
  double x2 = x_radians * x_radians;
  double term = x_radians;
  for (unsigned i = 1; i <= terms; i++) {
    sum += term;
    term *= -x2 / ((2 * i) * (2 * i + 1));
  }