我希望加快一个将一个双号映射到另一个双号的功能。但是该功能必须保持不变。相同的输入必须产生与以前完全相同的输出。这样做的原因是我们不想在系统中引入任何差异,即使这个原始功能有可疑的行为。
功能是:
double g(double d)
{
std::stringstream ss;
ss.precision(10);
ss<<std::fixed<<d;
std::string asString;
ss >> asString;
return atof(asString.c_str());
}
功能看起来很慢。通过遍历字符串将double转换为另一个double看起来很奇怪。
答案 0 :(得分:1)
更简单的方法是将精度为10位十进制数的双精度数添加到值pow(10, 10)
倍的数字,然后再次减去它。像这样:
double n = pow(10, 10 + ((long) log(d) / log(10)));
double truncated = d + n;
return truncated - n;