【发布时间】:2020-02-20 00:58:34
【问题描述】:
#include <stdio.h>
#include <math.h>
const int TERMS = 7;
const float PI = 3.14159265358979;
int fact(int n) {
return n<= 0 ? 1 : n * fact(n-1);
}
double sine(int x) {
double rad = x * (PI / 180);
double sin = 0;
int n;
for(n = 0; n < TERMS; n++) { // That's Taylor series!!
sin += pow(-1, n) * pow(rad, (2 * n) + 1)/ fact((2 * n) + 1);
}
return sin;
}
double cosine(int x) {
double rad = x * (PI / 180);
double cos = 0;
int n;
for(n = 0; n < TERMS; n++) { // That's also Taylor series!
cos += pow(-1, n) * pow(rad, 2 * n) / fact(2 * n);
}
return cos;
}
int main(void){
int y;
scanf("%d",&y);
printf("sine(%d)= %lf\n",y, sine(y));
printf("cosine(%d)= %lf\n",y, cosine(y));
return 0;
}
上面的代码是用泰勒级数计算正弦和余弦的。 我尝试测试代码,它适用于正弦(120)。 我得到了正弦(240)和正弦(300)的错误答案。
谁能帮我找出这些错误发生的原因?
【问题讨论】:
-
7 对于 240 或 300 可能还不够。但是你不能用整数阶乘走得更远,除非你使用 long long
-
在进行数学分析时,您应该忘记度数转换,并以弧度“原生”工作。
-
pow也可能非常糟糕......你想通过在循环中相乘来计算幂。
标签: c taylor-series