La raíz cuadrada de inversión rápida inusual de John Carmack (Quake III)

John Carmack tiene una función especial en el código fuente de Quake III que calcula la raíz cuadrada inversa de un flotador, 4 veces más rápido que el normal(float)(1.0/sqrt(x)), incluyendo un extraño0x5f3759df constante. Vea el código a continuación. ¿Puede alguien explicar línea por línea qué ocurre exactamente aquí y por qué esto funciona mucho más rápido que la implementación regular?

float Q_rsqrt( float number )
{
  long i;
  float x2, y;
  const float threehalfs = 1.5F;

  x2 = number * 0.5F;
  y  = number;
  i  = * ( long * ) &y;
  i  = 0x5f3759df - ( i >> 1 );
  y  = * ( float * ) &i;
  y  = y * ( threehalfs - ( x2 * y * y ) );

  #ifndef Q3_VM
  #ifdef __linux__
    assert( !isnan(y) );
  #endif
  #endif
  return y;
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta