问题描述
我尝试使用泰勒级数通过公式计算 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 调试我的代码,但无法弄清楚为什么它在第一次迭代后停止。
好吧,让我们再做一次,一步一步。
-
sum = x
(输入是7.0
,所以sum == 7.0
)。 -
for(i=3; fabs(sum) < accuracy; i+=2) { ...
由于sum
是7.0
,它不小于accuracy
,所以循环体永远不会执行。 -
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;
}