gpt4 book ai didi

c++ - 1/sqrt(x) 和 std::exp(-0.5 * std::log(x)) 之间的数值权衡

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:51 26 4
gpt4 key购买 nike

我遇到了一些计算的旧代码

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));

关于这些方法之间的数值优势(例如准确性或更有可能避免下溢/上溢)是否有任何理由?原作者可能是这么想的。

最佳答案

原始代码确实被认为是非常顽皮的,尤其是在现代 C++ 标准和 IEEE754 float 中:

std::sqrt is required by the IEEE standard be exact. [sic.]

此外,std::pow 没有这样的要求。

因此我很想将其重写为 1/std::sqrt(x),当然是测试。

引用:http://en.cppreference.com/w/cpp/numeric/math/sqrt

关于c++ - 1/sqrt(x) 和 std::exp(-0.5 * std::log(x)) 之间的数值权衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42066324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com