C语言中编写泰勒公式,sin x 误差小于10的-6次方;我编写的哪里有问题?请高手指点

#include<stdio.h>
main()
{
double x,sum,sin,a,jc=1.0;
int b=1,sign=1,i=1;
scanf("%lf",&x);
a=x;
sum=x;
while(fabs(sin=(a)/(jc))>=0.000001)
{

b+=2;
jc=1;
for(i=1;i<=b;i++)
jc=i*jc;
sign=-sign;
a=sign*x*x;
sin=(a)/(jc);
sum+=sin;
}

printf("%f\n",sum);
}

a=sign*x*x;
=> a *= sign*x*x;
简化程序:
#include<stdio.h>
main()
{
double x,sum,sin,a;
int b=1,sign=1,i=1;
scanf("%lf",&x);
a=x;
sum=x;
sin = x;
while(fabs(sin)>=1.0e-6)
{
b += 2;
sign = -sign;
sin *= sign*x*x/b/(b-1);
sum += sin;
}

printf("%f\n",sum);
}追问

sin分母是1.3.5.7~~~~~的阶乘啊

追答

没错,while循环第一次,|sin|=x³/3/2,循环第二次, |sin|*=x²/5/4 ,即|sin|=(x^5)/5/4/3/2=x^5/5!
这里利用*=运算符的迭代实现阶乘
若不相信,将while循环进行如下修改
int jc=1
while(fabs(sin)>=1.0e-6)
{
b += 2;
sign = -sign;
jc*= b*(b-1);
printf("n= %d, n! = %f\n", b, jc);
sin *= sign*x*x/b/(b-1);
sum += sin;
}
即可输出1.3.5.7~~~~~的阶乘值

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-24
------------------------------------------------------------------------------------------

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网