diff options
-rwxr-xr-x | code/game/q_math.c | 12 | ||||
-rwxr-xr-x | code/qcommon/cm_trace.c | 12 |
2 files changed, 14 insertions, 10 deletions
diff --git a/code/game/q_math.c b/code/game/q_math.c index bb0faf6..53412e1 100755 --- a/code/game/q_math.c +++ b/code/game/q_math.c @@ -551,15 +551,17 @@ void VectorRotate( vec3_t in, vec3_t matrix[3], vec3_t out ) */ float Q_rsqrt( float number ) { - long i; + union { + float f; + int i; + } t; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; - y = number; - i = * ( long * ) &y; // evil floating point bit level hacking - i = 0x5f3759df - ( i >> 1 ); // what the fuck? - y = * ( float * ) &i; + t.f = number; + t.i = 0x5f3759df - ( t.i >> 1 ); // what the fuck? + y = t.f; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed diff --git a/code/qcommon/cm_trace.c b/code/qcommon/cm_trace.c index 6eb9931..eb9b14f 100755 --- a/code/qcommon/cm_trace.c +++ b/code/qcommon/cm_trace.c @@ -131,15 +131,17 @@ SquareRootFloat ================ */ float SquareRootFloat(float number) { - long i; + union { + float f; + int i; + } t; float x, y; const float f = 1.5F; x = number * 0.5F; - y = number; - i = * ( long * ) &y; - i = 0x5f3759df - ( i >> 1 ); - y = * ( float * ) &i; + t.f = number; + t.i = 0x5f3759df - ( t.i >> 1 ); + y = t.f; y = y * ( f - ( x * y * y ) ); y = y * ( f - ( x * y * y ) ); return number * y; |