Raiz Cudrada Inversa
Raiz Cudrada Inversa
Raiz Cudrada Inversa
Investigación y
resumen del algoritmo
rápido de la raíz
cuadrada inversa
Profesor: Esaú Escobar Juárez
Al 20 de abril de 2024
El algoritmo del cual hablaremos es el ‘algoritmo rápido de la raíz cuadrada inversa’ este fue
diseñado por Greg Walsh en Ardent Computer, el cual se inspiró de al código escrito por
William Kahan y K.C. Ng en Berkeley. No es si no hasta que se implemento en un juego
llamado Quake III arena en donde se hizo conocido por los usuarios, este es capaz de
calcular el inverso de una raíz cuadrada en donde su principal propósito es proporcionarlo
de manera rápida y precisa, lo que permite realizar cálculos más eficientes en más de un
contexto diferente.
Según John Carmack ‘El algoritmo de la raíz cuadrada inversa rápida nos permitió hacer una
superficie enorme y espaciosa, como la mayoría de las áreas externas en Quake III: Arena,
y aún mantener altas tasas de cuadros por segundo para proporcionar una experiencia de
control y juego óptima.’.
Tenemos este código, el cual lo explicaremos línea por línea, lo más entendible posible, al
realizar la operación de la raíz cuadrada inversa se ocupan operaciones como sqrt y ‘/’
sabemos que son operaciones que hacen que el código no sea muy eficiente por su
complejidad, entonces se hace lo siguiente.
Al principio tenemos como entrada una variable del tipo flotante, de nombre ‘number’ , este
será al que debemos tomar la raíz cuadrada inversa, continuamos con la variable “i” que es
una declaración de un numero de 32 bits para después declarar dos números decimales
“flotantes” de mismo tamaño que i, llamados “x2” y “y”, luego almacenaremos 1,5 en la
variable con el nombre threehalfs o “tres mitades”.
Para entender un poco más recordemos que es un algoritmo que funciona con un entero de
32 bits y claro que en el lenguaje c tenemos algo así:
Lo que nos ayuda a representar a los números con lo anterior, alrededor de 2 mil millones
obviamente de forma binaria.
Para los números decimales lo que hacemos es hacer uso de la notación científica;
Para entender un poco mas tenemos 32 bits, usaremos el primer bit para el signo si es 0 es
positivo y si es 1 es negativo, en este caso siempre se utilizaran los positivos, los siguientes
8 bits definen el exponente lo que nos da un rango entre -127 y 131 ya que también existen
exponentes negativos, y por ultimo usaremos los 23 bits que sobran para la mantisa, pero
pondremos una coma después del primer bit lo que automáticamente nos da números del
1 al 2.
En el sistema binario solo hay digito que no es cero y si sabemos que el primer digito siempre
será un uno, no hay necesidad de almacenarlo, por lo que podemos guardar un bit moviendo
la coma un digito hacia la izquierda y fijando uno adicional en el número que representa por
lo que la mantisa esta entre uno y dos al hacer esta acción al 23 los redujimos para obtener
números entre 0 y 1 y luego agregamos un 1 extra para obtener números entre 1 y 2.
A continuación, tratando los bits que representan el número en punto flotante como un
entero de 32 bits, se realiza un desplazamiento lógico a la derecha de un bit y el resultado
se resta del número 0x5F3759DF (en notación decimal: 1.597.463.007), que es una
representación en punto flotante de una aproximación de sqrt(2^127). Esto resulta en la
primera aproximación de la raíz cuadrada inversa de la entrada. Tratando los bits de nuevo
como un número en punto flotante, se ejecuta una iteración del método de Newton,
produciendo una aproximación más precisa.
De acuerdo con su convergencia como ya fue mencionado funciona con números binarios
por lo cual al hacer la entrada de un numero normal debemos de pasarlo a binario para que
pueda funcionar el algoritmo y al obtener el resultado se debe de convertir otra vez a numero
decimal, por lo que es grandioso la manera que lo hace sabiendo que su complejidad es
mejor que el de otros algoritmos. Este es un algoritmo creado para tener una precisión del
3.4% pero al aplicar el teorema de Newton nos da un error de tan solo 0.17%, y al representar
los números a nivel de bits lo más preciso.
Aunque si bien es cierto hay varios factores que influyen estas, como, por ejemplo: el
número de iteraciones, el valor inicial de la aproximación y los criterios de terminación.
APLICACIONES
Este algoritmo tiene varias aplicaciones en la vida real, especialmente en los casos que
requieren calculo, entre las varias aplicaciones que se le pueden dar, la más conocida será
en la del juego Quake III, en donde ayudo a los cálculos de iluminación y reflexión para
calcular los ángulos de incidencia y reflejos, ayuda en aspectos de procesamiento de
señales digitales, especialmente en la implementación de algoritmos de filtrado adaptativo
en donde este algoritmo es fundamental, se utilizan en sistemas de comunicación,
procesamiento de imágenes y en la industria de audio para la reducción de ruido y la mejora
de la calidad de la señal.
Con esto nos damos cuenta de que es de gran ayuda en varios aspectos, incluso con los
que estamos familiarizados, como en las imágenes o los ejemplos ya antes mencionados.
CONCLUSIONES