星球大战义军舰队:floating point error:divide by 0

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/30 22:39:52
#include<stdio.h>
#include<math.h>
void main()
{
int i; double sum=0;
int n; int fact(int);
double x; double func(double,int);
printf("请输入x和n的值:");
scanf("%lf%d",&x,&n);
for(i=1;i<=n;i++)sum=sum+func(x,i);
printf("sinx的值为:%f",sum);
getch();
}
int fact(int m)
{
int i; int s=1;
for(i=2;i<=m;i++)s=s*i;
return(s);
}
double func(double m,int n)
{
double s;
s=pow((-1),(n-1))*pow(m,(2*n-1))/fact(2*n-1);
return(s);
}
请看我上段程序,哪里发生数据溢出了,怎么会有除以0的情况发生?
编译没有错,但是运行输入两个数后就跳出floating point error:divide by 0

我输入n=9的时候还正常,n=10了就溢出了,10!=3628800,按道理说应该在int的数值范围内啊。怎么会这么小就溢出了?

在我的调试当中没有出现你所谓的floating point error:divide by 0
但是出现了另外的错误就是浮点溢出,问题主要在于函数fact()的算法错误,此函数时阶乘函数但是您可能没有考虑到当n过大时会产生浮点表示字节数目不足的浮点错误。