gpt4 book ai didi

c - 在 C 中实现正弦和余弦的泰勒级数

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:47 24 4
gpt4 key购买 nike

我一直在遵循教授给我们的指南,但我就是找不到哪里出错了。我还一直在研究有关在 C 中实现泰勒级数的其他一些问题。

enter image description here

假设存在 RaiseTo(提高一个数的 x 次方)。

double factorial (int n)
{
int fact = 1,
flag;

for (flag = 1; flag <= n; flag++)
{
fact *= flag;
}

return flag;
}

double sine (double rad)
{

int flag_2,
plusOrMinus2 = 0; //1 for plus, 0 for minus
double sin,
val2 = rad,
radRaisedToX2,
terms;

terms = NUMBER_OF_TERMS; //10 terms

for (flag_2 = 1; flag_2 <= 2 * terms; flag_2 += 2)
{
radRaisedToX2 = RaiseTo(rad, flag_2);

if (plusOrMinus2 == 0)
{
val2 -= radRaisedToX2/factorial(flag_2);
plusOrMinus2++; //Add the next number
}

else
{
val2 += radRaisedToX2/factorial(flag_2);
plusOrMinus2--; //Subtract the next number
}
}

sin = val2;
return sin;
}

int main()
{
int degree;
scanf("%d", &degree);
double rad, cosx, sinx;
rad = degree * PI / 180.00;
//cosx = cosine (rad);
sinx = sine (rad);
printf("%lf \n%lf", rad, sinx);
}

所以在循环中,我得到 rad^x,将它除以从 1 开始的奇数级数的阶乘,然后根据需要对其进行加减,但是当我运行程序时,我得到了输出方式大于一,我们都知道 sin(x) 的极限是 1 和 -1,我真的很想知道我哪里做错了,这样我就可以改进,抱歉,如果这是一个非常糟糕的问题。

最佳答案

超过 12! 的任何内容大于 32 位 int 的容量,所以这些值会溢出,因此不会返回您期望的结果。

与其每次都计算完整的阶乘,不如看看序列中的每一项相对于前一项的情况。对于任何给定的术语,下一个是 -((x*x)/(flag_2*(flag_2-1))前一个的倍数。所以从 x 开始,然后为每个连续的项乘以该因子。

还有一个技巧可以将结果计算到 double 的精度不知道你需要多少条款。我将把它作为练习留给读者。

关于c - 在 C 中实现正弦和余弦的泰勒级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40808804/

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