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.
The highlighted comment was created in this revision.
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...)
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
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.