展开全部
改好了,一起结单吧
#include<stdio.h>
#include<math.h>
int main()
{
int i,sign=1;
double sum=0.0,sinx,x,m=1.0,e;
printf("Please enter x: \n");
scanf("%lf",&x);
sinx=sin(x);
printf("%lf\n",sinx);
e=1;
for(i=1;e>=1e-6;i++)
{
m=m*i;
if ( i%2!=0)
{
e=pow(x,i)/m ;
sum+=e*sign;
sign=-sign;
}
}
printf("sinx=%lf\n",sum);
return 0;
}
追问
25开始两个值就算的不同了
64开始出现-1.#ND00
如果输入63 两个数值相差大的惊人
追答
C语言的数据计算能力是有限的,n的阶乘超过20是个很大的数,已经超出了double的能力范围了。溢出了,最后分母会变为0,出现-1.#ND00
所以,你这题目算法是有局限性的。 如果想精确计算,就需要自己写计算方法了,实现超大数的运算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询