C++ C/C+中pow()函数的快速实现/逼近+;
我正在寻找一个更快的实现,或者是一个更好的函数近似值,它是由C++ C/C+中pow()函数的快速实现/逼近+;,c++,c,math,gcc,numeric,C++,C,Math,Gcc,Numeric,我正在寻找一个更快的实现,或者是一个更好的函数近似值,它是由cmath提供的 我需要加速以下功能 pow(x,y) exp(z*pow(x,y)) 其中zx和y的可能值是什么? 如果它们在合理的范围内,构建一些查找表可能会有所帮助 我推荐杰克·W·克伦肖的书中的套路 您可能还想发布一些代码,以显示如何调用这些函数,因为可能还有一些更高级别的优化可能性,从目前给出的描述来看并不明显。以下是一些方法: 。这个近似值非常不准确,如果它足够好,你必须自己尝试 。很好!我用它来做神经网络 如果pow的
cmath
提供的
我需要加速以下功能
pow(x,y)
exp(z*pow(x,y))
其中
zx和y的可能值是什么?
如果它们在合理的范围内,构建一些查找表可能会有所帮助 我推荐杰克·W·克伦肖的书中的套路
您可能还想发布一些代码,以显示如何调用这些函数,因为可能还有一些更高级别的优化可能性,从目前给出的描述来看并不明显。以下是一些方法:
- 。这个近似值非常不准确,如果它足够好,你必须自己尝试
- 。很好!我用它来做神经网络
如果pow的上述近似值不够好,您仍然可以尝试用指数函数替换它,具体取决于您的机器和编译器,这可能会更快:
x^y=e^(y*ln(x))
结果是:e^(z*x^y)=e^(z*e^(y*ln(x))
另一个技巧是当公式的某些参数不经常改变时。因此,如果x和y基本上是常数,您可以预先计算x^y并重新使用它。我想这个问题适合原始问题的评论部分,而不是还原投票。我认为这是一个完全合理的答案。如果pow是一个瓶颈,并且您需要的精度可以降到e-6,那么预计算可能是一种方法。我经常这样做,不仅仅是对战俘。你在找这样的东西吗?x的负值?!?说真的,伙计@沙科夫:用内联汇编程序来做这个?但是,对于z和x的负值,edgar.holleis:例如:-0.1^2.0你必须决定(如果可以的话,在这里发布)为了速度你愿意放弃多少精度和空间。你能坐多大的桌子?您需要的相对精度是多少?你必须有多大的提速?