【发布时间】:2017-04-10 01:55:08
【问题描述】:
我一直在按照我的教授给我们的指南进行操作,但我就是找不到哪里出错了。我还遇到了其他一些关于在 C 中实现泰勒级数的问题。
只要假设 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", °ree);
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,我真的很想知道我哪里出错了,所以我可以改进,对不起,如果这是一个非常糟糕的问题。
【问题讨论】:
-
请显示
factorial函数。如果您正在获得2*terms的阶乘,那么您是否知道20! = 2432902008176640000? -
@Weather 好的,已编辑,是的,我知道,我们的教授告诉我们用 10 个术语来解决它,而它只能达到 19 个!对于罪过,但是是的,我看到这是一个巨大的数字,但是当度数为 180 时,我最终得到了像 157318262.9 这样的数字,因为分母如此之大,它不应该更小吗?上帝,我讨厌我现在无法正常思考
-
您甚至没有使用错误的阶乘 - 您使用
return flag;返回了错误的变量,请参阅我的回答。所以你除以一个太小的数字,这个词就太大了。
标签: c trigonometry taylor-series