gpt4 book ai didi

c - C 中的泰勒级数(sin(240) 和 sin(300) 的问题)

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:51 25 4
gpt4 key购买 nike

#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) 的答案是错误的。

谁能帮我找出为什么会出现这些错误?

最佳答案

您应该只计算第一象限中的函数 [0, pi/2)。利用函数的属性来获取其他角度的值。例如,对于 [pi/2, pi] 之间的 x 值,sin(x) 可以通过 sin(pi - x) 计算。

120度的正弦,也就是40过90度,和50度是一样的:40度在90度之前。正弦从0开始,然后在90度向1上升,然后又镜像下降到180 时为零。

从 pi 到 2pi 的负正弦值就是 -sin(x - pi)。我会通过这个递归定义来处理所有事情:

sin(x):
cases x of:
[0, pi/2) -> calculate (Taylor or whatever)
[pi/2, pi) -> sin(pi - x)
[pi/2, 2pi) -> -sin(x - pi)
< 0 -> sin(-x)
>= 2pi -> sin(fmod(x, 2pi)) // floating-point remainder

cos 的类似方法,使用适合它的身份案例。

关于c - C 中的泰勒级数(sin(240) 和 sin(300) 的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58528609/

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