Fast Math.exp

Jump to navigation Jump to search
Revision as of 17 September 2011 at 21:56.
The highlighted comment was created in this revision.

Fast Math.exp

I started on a FastMath class and then caved and started playing with this one. Just thought I'd offer up a fast Math.exp I found from this blog (via StackOverflow):

public static double exp(double val) {
    final long tmp = (long) (1512775 * val + 1072632447);
    return Double.longBitsToDouble(tmp << 32);
}

Probably doesn't matter to most of you, but if you're doing DC with gaussians it might. I actually use a different kernel density in my main gun because 20,000 Math.exp's each time I aim would be pretty slow. (Not sure the above would solve that, but anyway...)

    Voidious20:40, 17 September 2011

    Didn't I post that just above?

      Darkcanuck20:55, 17 September 2011
       

      FYI - testing for values between -20 and 0, which would be the range if you're doing gaussians with bandwidth = 1/2 bot width and up to 40 bot widths.

      Math.exp() time: 0.30864 seconds
      FastMath.exp() time: 0.06371 seconds
      FastMath.exp() worst error: 0.02899
      FastMath.exp() avg error: 0.00073
      

      Or for -3 to 0:

      == exp Test ==
      Math.exp() time: 0.38425 seconds
      FastMath.exp() time: 0.07076 seconds
      FastMath.exp() worst error: 0.02899
      FastMath.exp() avg error: 0.00464
      
        Voidious21:00, 17 September 2011
         

        Oh, haha - sorry, I didn't see it in the file...

          Voidious21:00, 17 September 2011
           

          Yeah, I didn't update the main page, didn't want to overwrite others' functions. Try the atan/atan2 I posted, they're much more accurate I think.

            Darkcanuck22:56, 17 September 2011