我发现了一些旧代码,计算的是:
double y = 1 / std::sqrt(x);
使用:
constexpr double base16 = 16.0;
double log_base16 = std::log(base16);
double y = std::pow(base16, -0.5 * std::log(x) / log_base16);
这实质上是:
double y = std::exp(-0.5 * std::log(x));
这些方法在数值方面是否有任何合理的优势(如准确性或更容易避免下溢/上溢)?原作者可能认为有。
constexpr
在2011年被标准化。 - Potatoswatter