C语言利用泰勒公式,计算sin(x)!!急

问题如下:
利用泰勒级数:

sin(x)=x-(x3/3!)+(x5/5!)-(x7/7!)+(x9/9!)-...
计算sin(x)的值,要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。

我自己编的如下(知道更简洁的方法了,但是不知道这个为什么错):

#include<stdio.h>

void main()

{
float x;
double k,s;
int y,n,m,z=1,h=1;

printf("input x:");
scanf("%f",&x);

s=x;
k=x*x*x;

for(m=2,y=3;;k=k*x*x,y+=2,m++)
{
for(n=1;n<=y;n++)
{
h=h*n;
}
z=-z;
s+=k/(z*h);
if(k/h<1e-5)
{
printf("sin(x)=%f,count=%d\n",s,m);break;
}
}
}
图方便-。-字母随便找的
m就是算第几项小于1e-5的。

第1个回答  2014-04-20
第十八行改为:
18:for(n = 1,h = 1;n <= y;n++)
注意,每当h被使用时,要首先初始化。追问

对!这是一个问题,先谢过。不过我照这样改了之后,还是有问题,输入3,正确应是0.4几,我的输出确实-0.3几,愁死了

追答

经过调试,找出错误了。
原因主要是h溢出了。在计算次数大于9以后,h大于了int最大值。

把h改为double类型的。

本回答被提问者采纳
相似回答