![]() |
1
16
在开始设计和部署超越功能的定制实现以提高性能之前,最好在算法级别以及通过工具链进行优化。不幸的是,我们没有关于这里要优化的代码的任何信息,也没有关于工具链的信息。
在算法级别,检查是否所有对超越函数的调用都是真正必要的。也许有一种数学转换需要更少的函数调用,或者将超越函数转换为代数运算。是否有任何超越函数调用可能是多余的,例如,因为计算不必要地切换对数空间?如果精度要求适中,可以使用
编译器倾向于提供各种开关,这些开关会影响数字密集型代码的性能。除了将一般优化级别提高到
对数函数的自定义实现通常涉及分隔二进制浮点参数
|
![]() |
2
4
|
|
3
2
|
![]() |
4
0
我矢量化了@njuffa的答案。自然日志,与AVX2配合使用:
|
![]() |
5
0
我还需要一个快速的对数近似值,到目前为止最好的似乎是基于Ankerls算法的近似值。 http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/
只有一个减法和乘法。它出乎意料地好,而且速度快得无与伦比。 |
![]() |
6
-2
这取决于你需要有多准确。通常调用log来了解数字的大小,通过检查浮点数的指数字段,基本上可以免费执行此操作。这也是你的第一近似值。我将为我的书《基本算法》插入一个插件,该书解释了如何从第一原理实现标准库数学函数。 |
![]() |
James · 阻塞问题的一种算法设计[C++代码] 8 年前 |
![]() |
qwark · C++中非常快速的近似对数(自然对数)函数? 8 年前 |
![]() |
user2946696 · 没有java.lang.Math的二进制对数? 11 年前 |
![]() |
R_User · 如何将线性回归绘制为双对数R图? 11 年前 |