gpt4 book ai didi

c++ - Ankerl快速指数算法简单解释

转载 作者:太空狗 更新时间:2023-10-29 22:54:55 25 4
gpt4 key购买 nike

最近,我在寻找一种比数学 exp(x) 函数更快的替代方法。我发现了一些非常适合我的东西,这个解决方案通常被称为 Ankerl 算法。引用:

https://github.com/ekmett/approximate/blob/master/cbits/fast.c https://martin.ankerl.com/2012/01/25/optimized-approximative-pow-in-c-and-cpp/

C 上有典型的 Ankerl exp 函数实现

double exp_fast(double a)
{
union { double d; long long x; } u;
u.x = (long long)(6497320848556798LL * a + 0x3fef127e83d16f12LL);
return u.d;
}

int main()
{
for (float x = 0; x < 10; x += 0.01)
std::cout << x << '\t'
<< exp(x) << '\t'
<< exp_fast(x)
<< std::endl;

return 0;
}

不幸的是,我找不到这个算法的描述。也许在文献中它被称为其他东西。我试图绘制这个函数并且非常惊讶 - 这是指数函数的分段线性逼近!它可以在非常广泛的输出值范围内完美运行。所有图表包含大约一千个点(点击放大)

enter image description here enter image description here

尽管付出了所有努力,我还是无法确切地理解它是如何工作的。令我惊讶的是,这么简单的代码怎么能给出这么好的近似值。如果有人能清楚地解释这是如何工作的,以及选择值 6497320848556798LL0x3fef127e83d16f12LL 的考虑因素,我将不胜感激。第二件事 - 使用这样的解决方案是否安全,或者它是否是一种应该避免的肮脏黑客?

最佳答案

我认为这个算法来自论文A Fast, Compact Approximation of the Exponential Function由 Nicol N. Schraudolph 介绍。

论文的“算法”部分解释了它的工作原理。那里提供的代码也考虑了机器的字节顺序。

关于c++ - Ankerl快速指数算法简单解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882855/

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