精度为 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.
好吧,让我们再做一次,一步一步来。
sum = x
(输入是7.0
,所以sum == 7.0
)。
for(i=3; fabs(sum) < accuracy; i+=2) { ...
因为sum
是7.0
,不小于accuracy
,所以循环体永远不会执行。
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;
}
我正在尝试通过精度为 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.
好吧,让我们再做一次,一步一步来。
sum = x
(输入是7.0
,所以sum == 7.0
)。for(i=3; fabs(sum) < accuracy; i+=2) { ...
因为sum
是7.0
,不小于accuracy
,所以循环体永远不会执行。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;
}