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;
}

Antworten auf die Frage(7)

Ihre Antwort auf die Frage