#include <stdio.h> #include <math.h>

int main()

{ int n,i,k; float x,re=0,m;

scanf("%f %d", &x,&n);
  for (i=1;i<=n;i++)
  {
      m=pow(-1, i-1)*pow(i,2*i-1);
      for (k=1;k<=(2*i-1);k++)
      {
          m=m/k;
      }
      re=re+m;
  }
printf("%.8f",re);
return 0;

}

这个程序的问题在于计算sin(x)的方式不正确。

首先,sin(x)可以使用泰勒级数展开来计算,即:

sin(x) = x - (x^3 / 3!) + (x^5 / 5!) - (x^7 / 7!) + ...

但是在你的程序中,你使用了一个错误的公式来计算sin(x)。这个公式是错误的,因为你没有正确计算阶乘和幂函数。你使用的公式应该是:

m=pow(-1, i-1)pow(x,2i-1) / factorial(2*i-1)

其中,factorial(n)表示n的阶乘。

另外,你的程序中使用了两层循环来计算sin(x),这是不必要的。你只需要使用一层循环来计算泰勒级数中的每一项即可。

下面是修改后的程序:

#include <stdio.h>

int factorial(int n) { int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; }

int main() { int n; float x, re = 0;

scanf("%f %d", &x, &n);
for (int i = 0; i < n; i++) {
    int power = 2 * i + 1;
    float term = pow(-1, i) * pow(x, power) / factorial(power);
    re += term;
}
printf("%.8f", re);

return 0;

}

这样修改后的程序可以正确计算sin(x)的值。

C语言计算sin(x)函数优化:错误公式修正及循环优化

原文地址: https://www.cveoy.top/t/topic/o7XT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录