【发布时间】:2016-02-01 08:18:02
【问题描述】:
我正在为我们学校做一个项目,我们需要创建一个程序来计算 sin x 和 cos x 的泰勒展开级数的近似值,只使用 <stdio.h> 和 不使用 除int main() 之外的用户定义函数,从-180 到180 的所有角度,增量为+5。以下是我的代码:
#include <stdio.h>
#define PI 3.141592653589
#define NUMBER_OF_TERMS 10
int
main()
{
int cosctr, sinctr;
double ctr, radi;
double cosaccu, costerm, sinaccu, sinterm;
for (ctr = -180; ctr < 185; ctr = ctr + 5) {
radi = ctr * PI/180.0;
cosctr = 1;
cosaccu = 1;
costerm = 1;
sinctr = 2;
sinaccu = radi;
sinterm = radi;
while (cosctr <= 2*NUMBER_OF_TERMS) {
costerm = costerm*(-1)*(radi*radi)/(cosctr*(cosctr + 1));
cosaccu = cosaccu + costerm;
cosctr+=2;
} do {
sinterm = sinterm*(-1)*(radi*radi)/(sinctr*(sinctr + 1));
sinaccu = sinaccu + sinterm;
sinctr+=2;
} while (sinctr <= 2*NUMBER_OF_TERMS);
printf("%.2lf %.12lf %.12lf %.12lf\n", ctr, radi, cosaccu, sinaccu);
} return 0;
}
上面的代码对于 15 项展开近似是准确的。但是,如果我将 NUMBER_OF_TERMS 更改为例如 5 或 10,则近似值有缺陷。
有什么建议吗?
让我澄清一下:我需要获得 5 项、10 项和 15 项的近似值。除了<stdio.h>,我不能使用任何其他库。我不能使用int main() 之外的任何其他功能(对于我之前的解释含糊不清,我深表歉意)。
请使用随附的更正代码回答。
【问题讨论】:
-
你能做的只有这么多,你的任务需要的迭代次数多吗?您需要多少位数的准确度?
-
在那个程序中,
main()肯定是一个用户定义的函数。换句话说,您的要求很奇怪并且......具有误导性。 -
“近似值有缺陷”是什么意思?近似值越准确,包含的项越多。这就是它的工作原理。近似值是否比您预期的更不准确?你期望什么输出,它给出了什么?
-
"请使用包含的更正代码回答。"嗯,没有。您编写代码,我们将帮助您。
-
其实需要的是0-45(0,5,10,15,20,25,30,35,40,45degrees)的计算。
标签: c taylor-series