Wie kann ein Float korrekt in ein Int und umgekehrt umgewandelt werden?
Der folgende Code führt eine schnelle inverse Quadratwurzeloperation durch einige Bit-Hacks aus. Der Algorithmus wurde wahrscheinlich Anfang der 90er Jahre von Silicon Graphics entwickelt und ist auch in Quake 3 enthalten.Mehr Info
Allerdings bekomme ich folgendesWarnung vom GCC C ++ - Compiler: dereferenzierender typgenauer Zeiger bricht abStrict-Aliasing Regeln
Sollte ich es benutzenstatic_cast
, reinterpret_cast
oderdynamic_cast
stattdessen in solchen Situationen?
float InverseSquareRoot(float x)
{
float xhalf = 0.5f*x;
int32_t i = *(int32_t*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}