Fast Math.exp

Jump to navigation Jump to search
Revision as of 17 September 2011 at 22:03.
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...)

    Voidious21:40, 17 September 2011

    Didn't I post that just above?

      Darkcanuck21: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
      
        Voidious22:00, 17 September 2011
         

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

          Voidious22: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.

            Darkcanuck23:56, 17 September 2011
             

            Yep - already tested them, using them, and running a long benchmark with a FastMath Diamond. =) I actually haven't noticed any huge speed increase in Diamond, so I'm hesitant to keep all this FastMath stuff. But it is faster and the error rate looks pretty low, so if I don't take any score hit I'll definitely keep it.

              Voidious00:03, 18 September 2011