27 lines
382 B
C
27 lines
382 B
C
/* 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;
|
|
}
|