寻找执行此双重功能的更快方法

Looking for faster method of doing this double function

本文关键字:方法 功能 执行 寻找      更新时间:2023-10-16

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

功能是:

double g(double d)
{
        std::stringstream ss;
        ss.precision(10);
        ss<<std::fixed<<d;
        std::string asString;
        ss >> asString;
        return atof(asString.c_str());
}

功能看起来很慢。 通过字符串将一个双精度转换为另一个双精度看起来很奇怪。

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

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