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

问题描述

我尝试使用泰勒级数通过公式计算 sin(x) 的 sinx,精度为 0.00001(意思是直到总和低于 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); 
}

任何帮助将不胜感激。 谢谢

解决方法

尝试使用 gdb 调试我的代码,但无法弄清楚为什么它在第一次迭代后停止。

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

  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,所以这就是您的函数返回的内容。

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

附言这里是您可能打算编写的代码:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...