问题如下:
利用泰勒级数:
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的。
对!这是一个问题,先谢过。不过我照这样改了之后,还是有问题,输入3,正确应是0.4几,我的输出确实-0.3几,愁死了
追答经过调试,找出错误了。
原因主要是h溢出了。在计算次数大于9以后,h大于了int最大值。
把h改为double类型的。