您的位置:首页 > 其它

华为OJ 一个精度问题

2014-03-05 19:08 274 查看
第一段

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够大,最后求倒数会造成精度不够,加的方法也应该从最小的往最大的相加
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: