项目场景:
#include<stdio.h>
#include<math.h>
double fact(int n);
int main()
{
double x,sum=1.0;
scanf("%lf",&x);
if(x>=0.0&&x<=5.0)
for(int i=1;pow(x,i)/fact(i)>=0.00001;i++)
sum +=pow(x,i)/fact(i);
printf("%.4lf",sum);
return 0;
}
double fact(int n)
{
int i,res=1;
for(i=1;i<=n;i++)
res=res*i;
return(res);
}
问题描述:
最大输入时总是输出错误
原因分析:
1.res没有改成double型,在主函数中做分母时会舍入
2.浮点运算是有精度误差,设置时至少需要精度高2位
int i,res=1;
for(int i=1;pow(x,i)/fact(i)>=0.00001;i++)
解决方案:
将变量res改成double型
调高2位精度
int i;
double res=1.0;
for(int i=1;pow(x,i)/fact(i)>=0.0000001;i++)