精度为 0.00001 的泰勒级数(打印与用户输入相同的值)C 代码

Taylor series with accuracy of 0.00001 (prints same value as entered by user) C code

我正在尝试通过精度为 0.00001 的公式使用 sin x 的泰勒级数计算 sin(x)(意思是直到总和低于 0.00001 的精度)。

(x由弧度给出)。

问题是我计算 sin 的函数(使用泰勒级数公式)打印出与给定相同的值(例如,如果给定 7,它将打印出 7.00000 而不是 0.656987)。 尝试使用 gdb 调试我的代码,但无法弄清楚为什么它在第一次迭代后停止。 这是我的 C 代码,用于使用泰勒级数计算 sin (x)。

double my_sin(double x) {
  int i=3,sign=1; // sign variable is meant to be used for - and + operator inside loop.
// i variable will be used for power and factorial division
  double sum=x, accuracy=0.000001; // sum is set for first x.
for(i=3;fabs(sum) < accuracy ;i+=2){ // starting from power of 3.
    sign*=-1; // sign will change each iteration from - to +.
sum+=sign*(pow(x,i)/factorial(i)); // the formula itself (factorial simple function for division)
}
return (sum); 
}

如有任何帮助,我们将不胜感激。 谢谢

tried to debug my code using gdb and couldnt figure out why it stops after first iteration.

好吧,让我们再做一次,一步一步来。

  1. sum = x(输入是7.0,所以sum == 7.0)。
  2. for(i=3; fabs(sum) < accuracy; i+=2) { ...
    因为sum7.0,不小于accuracy,所以循环体永远不会执行。
  3. return sum; -- sum 仍然是 7.0,所以这就是你的函数 returns.

您的程序完全按照您的要求执行。

P.S。此处您可能打算编写的代码:

double my_sin(double x) {
  double sum = x, accuracy = 0.000001;
  double delta = DBL_MAX;
  for(int i = 3, sign = -1; accuracy < fabs(delta); i += 2, sign = -sign) {
    delta = sign * pow(x, i) / factorial(i);
    sum += delta;
  }
  return sum;
}