C语言中关于-1.#IND00的问题?

‘’... ‘’ 展开
 我来答
kaixingui2012
推荐于2017-09-14 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6440万
展开全部
改好了,一起结单吧
#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 

所以,你这题目算法是有局限性的。 如果想精确计算,就需要自己写计算方法了,实现超大数的运算。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式