Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C+中pow()函数的快速实现/逼近+;_C++_C_Math_Gcc_Numeric - Fatal编程技术网

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你必须决定(如果可以的话,在这里发布)为了速度你愿意放弃多少精度和空间。你能坐多大的桌子?您需要的相对精度是多少?你必须有多大的提速?