寻找更快的方法来做这个双重功能

时间:2014-12-04 20:49:35

标签: c++ optimization gnu ieee-754

我希望加快一个将一个双号映射到另一个双号的功能。但是该功能必须保持不变。相同的输入必须产生与以前完全相同的输出。这样做的原因是我们不想在系统中引入任何差异,即使这个原始功能有可疑的行为。

功能是:

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看起来很奇怪。

1 个答案:

答案 0 :(得分:1)

更简单的方法是将精度为10位十进制数的双精度数添加到值pow(10, 10)倍的数字,然后再次减去它。像这样:

double n = pow(10, 10 + ((long) log(d) / log(10)));
double truncated = d + n;
return truncated - n;