第一段
double Fact(int k)
{
double result=1.0;
for(int i=1;i<=k;i++)
result*=(double)i;
return 1.0/result;
}
void GetResult(int InputNum, double *NumResult)
{
*NumResult=0.0;
for(int i=InputNum;i>=1;i--)
{
*NumResult+=Fact(i);
}
return ;
}
第二段
int Fact(int k)
{
int result=1.0;
for(int i=1;i<=k;i++)
result*=i;
return result;
}
void GetResult(int InputNum, double *NumResult)
{
*NumResult=0.0;
for(int i=InputNum;i>=1;i--)
{
*NumResult+=(double)1/Fact(i);
}
return ;
}
第一段 得到的答案比第二段精度要高,原因在于:
double有8字节,int就4字节,如果n够大,最后求倒数会造成精度不够,加的方法也应该从最小的往最大的相加