Fast math ops

Just wanted to stash this little tidbit here in case I needed it for something.

This Slashdot article bringing up Origin of Quake3's Fast InvSqrt(). The original article is a bit of a sleuthing expedition looking for the origins of this little code snippet and makes for an interesting read along with pointing to some other interesting sources.

The algorithm is a remarkable in the way it hides a lot of complexity in a simple looking package. All it does is calculate 1/sqrt(x), but does it very quickly using a cleverly written Newton-Raphson method.

float InvSqrt(float x) {
  float xhalf = 0.5f*x;
  int i = *(int*)&x; // get bits for floating value
  i = 0x5f3759df - (i>>1); // gives initial guess y0
  x = *(float*)&i; // convert bits back to float
  x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
  return x;
}