Fast implementation/approximation of pow() function in C/C++

半腔热情 提交于 2019-12-01 00:10:35

问题


I m looking for a faster implementation or good a approximation of functions provided by cmath.

I need to speed up the following functions

  1. pow(x,y)
  2. exp(z*pow(x,y))

where z<0. x is from (-1.0,1.0) and y is from (0.0, 5.0)


回答1:


Here are some approxmiations:

  • Optimized pow Approximation for Java and C / C++. This approximation is very inaccurate, you have to try for yourself if it is good enough.
  • Optimized Exponential Functions for Java. Quite good! I use it for a neural net.

If the above approximation for pow is not good enough, you can still try to replace it with exponential functions, depending on your machine and compiler this might be faster:

  1. x^y = e^(y*ln(x))
  2. And the result: e^(z * x^y) = e^(z * e^(y*ln(x)))

Another trick is when some parameters of the formula do not change often. So if e.g. x and y are mostly constant, you can precalculate x^y and reuse this.




回答2:


What are the possible values of x and y? If they are within reasonable bounds, building some lookup tables could help.




回答3:


I recommend the routines in the book "Math Toolkit for Real-Time Programming" by Jack W. Crenshaw.

You might also want to post some of your code to show how you are calling these functions, as there may be some other higher level optimisation possibilities that are not apparent from the description given so far.



来源:https://stackoverflow.com/questions/2347138/fast-implementation-approximation-of-pow-function-in-c-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!