L'algorisme accepta un nombre de coma flotant de 32 bits com a entrada i emmagatzema un valor reduït a la meitat per al seu ús posterior. Aleshores, tractant els bits que representen el nombre de coma flotant com un nombre enter de 32 bits, es realitza un desplaçament lògic d'un bit a la dreta i el resultat es resta del nombre 0x5F3759DF, que és una representació de coma flotant d'una aproximació de . Això resulta en la primera aproximació de l'arrel quadrada inversa de l'entrada. Tractant els bits de nou com un nombre de coma flotant, executa una iteració del mètode de Newton, donant una aproximació més precisa.[2]
L'algoritme es va atribuir sovint erròniament a John Carmack, però de fet el codi es basa en un article inèdit de William Kahan i KC Ng distribuït el maig de 1986. La constant original es va produir a partir d'una col·laboració entre Cleve Moler i Gregory Walsh, mentre treballaven per a Ardent Computing a finals dels anys vuitanta.
Amb els avenços posteriors del maquinari, especialment la instrucció x86SSErsqrts, aquest mètode no és generalment aplicable a la informàtica de propòsit general, encara que segueix sent un exemple interessant tant històricament com per a màquines més limitades, com ara sistemes encastats de baix cost. Tanmateix, més fabricants de sistemes encastats inclouen acceleradors trigonomètrics i altres matemàtics com CORDIC, evitant la necessitat d'aquests algorismes.[3]
Motivació
L'arrel quadrada inversa d'un nombre de coma flotant s'utilitza per calcular un vector normalitzat. Els programes poden utilitzar vectors normalitzats per determinar angles d'incidència i reflexió. Els programes de gràfics 3D han de realitzar milions d'aquests càlculs cada segon per simular la il·luminació. Quan el codi es va desenvolupar a principis de la dècada de 1990, la majoria de la potència de processament de coma flotant es va endarrerir amb la velocitat del processament dels nombres enters. Això era problemàtic per als programes de gràfics en 3D abans de l'arribada del maquinari especialitzat per gestionar la transformació i la il·luminació. La longitud del vector es determina calculant la seva norma euclidiana: l'arrel quadrada de la suma de quadrats de les components del vector. Quan cada component del vector es divideix per aquesta longitud, el nou vector serà un vector unitari apuntant en la mateixa direcció. En un programa de gràfics 3D, tots els vectors es troben en un espai tridimensional, per tant seria un vector .[4]
és la norma euclidiana del vector.
és el vector (unitat) normalitzat, utilitzant representar .