tags:

views:

883

answers:

3

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)

+2  A: 

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

Alex Jenter
I guess this question fits in the original question's comments section rather.
legends2k
reverting down vote. I think it's a perfectly reasonable answer. If pow is a bottleneck and you have a required accuracy down to e-6 then precalculation might be the way to go. I do this a lot and not just with pow.
Martin
+1  A: 

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.

Paul R
+1  A: 

Here are some approxmiations:

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.

martinus