From 557900d1b277a315372151e1ef29ea1398537e6c Mon Sep 17 00:00:00 2001 From: Valmar33 Date: Sun, 29 May 2016 05:14:57 +1000 Subject: [PATCH] Revert "Revert "Added HMM_FastInverseSquareRoot function"" --- HandmadeMath.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/HandmadeMath.h b/HandmadeMath.h index 912b2ad..7f54423 100644 --- a/HandmadeMath.h +++ b/HandmadeMath.h @@ -223,6 +223,7 @@ HMMDEF float HMM_ToRadians(float Degrees); HMMDEF float HMM_Inner(hmm_vec3 A, hmm_vec3 B); HMMDEF float HMM_SquareRoot(float Float); HMMDEF float HMM_LengthSquareRoot(hmm_vec3 A); +HMMDEF float HMM_FastInverseSquareRoot(float Number); HMMDEF float HMM_Length(hmm_vec3 A); HMMDEF float HMM_Power(float Base, int Exponent); HMMDEF float HMM_Clamp(float Min, float Value, float Max); @@ -351,6 +352,24 @@ HMM_LengthSquareRoot(hmm_vec3 A) return (Result); } +HINLINE float +HMM_FastInverseSquareRoot(float Number) +{ + long i; + 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; + + y = y * ( threehalfs - ( x2 * y * y ) ); + + return ( y ); +} + HINLINE float HMM_Length(hmm_vec3 A) {