/* Implementation of fast inverse square root.
 * See http://en.wikipedia.org/wiki/Fast_inverse_square_root
 */

float fisqrt(float n)
{
	long i;
	float x2, y;
	union {
	    float f;
	    long l;
	} u;

	x2 = n * 0.5f;
	y = n;
/*	i = *(long *)&y; */
	u.f = y;
	i = u.l;
	i = 0x5f3759df - (i>>1);
/*	y = *(float *)&i; */
	u.l = i;
	y = u.f;
	y = y * (1.5f - (x2*y*y));

	return y;
}
