使用泰勒级数在 C 中求 sin(x)
Using a Taylor series to find sin(x) in C
我有一个作业,我的教授要我们使用泰勒级数计算 sin(x)。他希望我们在两个连续分数之间的差值小于 10^-6 时停止迭代。
我最终解决了这个问题,例如 x^5/5!与 (x^3/3!) * (x^2/4*5) 相同,这对所有分数都是正确的。所以我可以保留我计算的前一个分数并在下一次迭代中使用它。问题是我最终得到的数字与其实际的罪有一点偏差,我无法提前计算出 why.Thanks。这是我的代码:
#include <stdio.h>
#include <Math.h>
#define pi 3.14159265358979323846
int main(int argc, int **argv){
int sign = -1, pwr = 3;
double previous, current, rad,sum, degr;
printf("Calculating sin using Taylor Series\n\n");
printf("Give degrees: ");
scanf("%lf", °r);
// translate to rads
rad = degr*(pi/180);
sum = rad;
previous = rad;
do{
current = (previous * pow(rad, 2))/(pwr* pwr-1);
sum += sign*current;
pwr += 2;
sign *= -1;
}
while(abs(current - previous) > pow(10, -6));
printf("The sin of %lf degrees is ", degr);
printf("%.6f\n", sum);
printf("%.6f", sin(rad));
return 0;
}
您正在使用 abs
函数,它需要一个 int
和 returns 一个 int
。如果当前项和先前项之间的差异小于 1,这将导致循环存在,因为它将 diff
设置为 0.
相反,您需要 fabs
和 returns double
。
我有一个作业,我的教授要我们使用泰勒级数计算 sin(x)。他希望我们在两个连续分数之间的差值小于 10^-6 时停止迭代。
我最终解决了这个问题,例如 x^5/5!与 (x^3/3!) * (x^2/4*5) 相同,这对所有分数都是正确的。所以我可以保留我计算的前一个分数并在下一次迭代中使用它。问题是我最终得到的数字与其实际的罪有一点偏差,我无法提前计算出 why.Thanks。这是我的代码:
#include <stdio.h>
#include <Math.h>
#define pi 3.14159265358979323846
int main(int argc, int **argv){
int sign = -1, pwr = 3;
double previous, current, rad,sum, degr;
printf("Calculating sin using Taylor Series\n\n");
printf("Give degrees: ");
scanf("%lf", °r);
// translate to rads
rad = degr*(pi/180);
sum = rad;
previous = rad;
do{
current = (previous * pow(rad, 2))/(pwr* pwr-1);
sum += sign*current;
pwr += 2;
sign *= -1;
}
while(abs(current - previous) > pow(10, -6));
printf("The sin of %lf degrees is ", degr);
printf("%.6f\n", sum);
printf("%.6f", sin(rad));
return 0;
}
您正在使用 abs
函数,它需要一个 int
和 returns 一个 int
。如果当前项和先前项之间的差异小于 1,这将导致循环存在,因为它将 diff
设置为 0.
相反,您需要 fabs
和 returns double
。