先来看看sin(x)的泰勒展开式长什么样吧!
以下是实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
double x;//输入的数x
while(scanf("%lf",&x)!=EOF)//有多组输入
{
if(x==0)
{
printf("%.6lf\n",x);
}
else
{
long long zi,mu,i;/*此处一定要注意 zi,mu是long long型变量,因为涉及到"幂"、"阶乘" ,只要i稍稍增大 , 就会超出int的范围*/
double sum=0, s=1.0;
for(i=1; ; i=i+2)
{
/*1求x的幂*/
zi=pow(x,i);
//printf("分子=%ld,",zi);
/*2求i的阶乘*/
mu=1;
int k=1;
for(k=1; k<=i; k++)
{
mu=mu*k;
}
//printf(",分母=%ld",mu);
/*3求总和sum*/
sum=sum + s*zi/mu;
//printf(",此项绝对值=%ld",zi*1.0/mu);
//printf(",此时sum=%ld\n",sum);
/*4判断当前项的绝对值是否小于0.00001?若是,则“回退”一步,减去此项;若不是,继续往下运算*/
if(1.0*zi/mu < 1e-5) //注意此处要乘以1.0以后再除,因为zi和mu都是long long, 两者相除自动取整
{
sum = sum - s*zi/mu;
break;
}
s=-1*s;//别忘了变号
}
printf("%.6lf\n",sum);
}
}
return 0;
}