gpt4 book ai didi

c - C 编程中 cos x 和 sin x 的泰勒级数展开,不使用 math.h 且仅在 int main() 内部

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:54 27 4
gpt4 key购买 nike

我正在为我们学校做一个项目,我们需要创建一个程序来计算 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() 之外的任何其他功能(对于我之前解释的含糊不清,我深表歉意)
请使用随附的更正代码进行回答。

最佳答案

sind(degrees)cosd(degrees) 的高进动但简单计算的关键是首先将度的范围减小到 0 到 90(或甚至 0 到 45),首先使用 degree 排列的常用三角函数调整。

减少:
angle = fmod(angle, 360)//减少 (-360..360) 或使用 a = a - (int)(a/360)
sin(x) = -sin(-x)//减少到 [0..360)
cos(x) = cos(-x)//减少到 [0..360)
sin(x) = -sin(x-180)//减少到 [0..180)
cos(x) = -cos(x-180)//减少到 [0..180)
sin(x) = cos(90-x)//减少到 [0..90)
进一步削减:
对于 [45-90) 使用 sin(x) = cos(90-x)//减少到 [0..45)

然后转换为弧度并使用泰勒级数展开。

Example

注意:由于代码处理的是double,通常是 17 位精度,因此无需使用过程 PI 近似值。

// #define PI   3.141592653589
#define PI 3.1415926535897932384626433832795

关于c - C 编程中 cos x 和 sin x 的泰勒级数展开,不使用 math.h 且仅在 int main() 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com