Hola yoel_alejandro,
Muchas gracias por tomarte el tiempo de leerlo. Ciertamente el comentario " // what the fuck?" en el código que incluyó alguno de los compañeros del programador original, indica que se trata de la implementación de un razonamiento complejo y difícil de entender si no se explica.
Por suerte, más allá de unos cuantos detalles, hay una idea central en este cálculo que explica su eficiencia, y es la siguiente relación log(x^a) = a log(x), siendo log un logaritmo en cualquier base. En este caso, como intentamos calcular la raíz cuadrada inversa de un número (x^(-1/2)), el valor de a utilizado es -1/2.
Además, por la especificación de los números en coma flotante, considerar un float como long (sin hacer cast) es una aproximación del logaritmo en base 2 de ese float, y viceversa. Con lo cual, para pasar de un número a su logaritmo y del logaritmo al número original, basta simplemente con pasar de considerar un tipo de variable como otro tipo diferente (float y long en este caso).
En resumen, el código (repito que pasando por alto los detalles) lo que hace con el número x es:
- Calcular el logaritmo en base 2 del número considerando el float original como long, obteniendo log(x).
- Calcular el logaritmo en base 2 de la raíz cuadrada inversa de ese mismo número, lo que supone gracias a las propiedades de los logaritmos, multiplicar el logaritmo por -1/2, obteniendo log(x^(-1/2)).
- Deshacernos del logaritmo mediante la operación inversa a la primera, es decir, considerando el float como long, obteniendo x^(-1/2).
Espero que este resumen ayude a entender mejor la implementación de la raíz cuadrada inversa rápida.
¡Un saludo!