08.10.2026 · Signal Titans Editorial
Le célèbre hack de la racine carrée de Quake III n’était pas de Carmack. La vraie histoire est meilleure.

Demandez à une salle pleine de programmeurs qui a écrit le hack le plus célèbre de l’histoire du jeu vidéo, et beaucoup donneront la même réponse : John Carmack.
L’histoire se raconte ainsi. Quake III Arena devait calculer rapidement l’éclairage et les reflets sur le matériel de 1999. Quelque part dans son code source se cache une minuscule fonction qui calcule 1/√x grâce à une astuce bizarre : elle traite un nombre à virgule flottante comme un entier, le soustrait de la constante hexadécimale 0x5f3759df et obtient une réponse presque juste. Le commentaire à côté de cette ligne se résume à un juron exaspéré. On dirait l’œuvre d’un génie solitaire, et Carmack était le génie d’id Software.
Il n’y a qu’un problème. Carmack a dit qu’il ne l’avait pas écrite.
Le code que tout le monde partage
Lorsqu’id Software a publié le code source de Quake III Arena sous licence GNU General Public License en 2005, des programmeurs ont trouvé cette fonction dans un fichier de mathématiques. Sans ses commentaires d’origine, elle ressemble à ceci :
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 ) );
return y;
}
Elle est devenue l’un des extraits de code les plus partagés d’Internet, et la légende s’est accrochée au nom le plus célèbre de la maison.
La fissure dans la légende
Rys Sommefeldt, du site spécialisé en graphisme Beyond3D, a fait ce que la plupart des récits oublient : il a posé la question. Carmack a répondu que ce n’était pas son code, et qu’il ne pensait pas non plus que Michael Abrash, l’autre expert en optimisation d’id, l’ait écrit. Il a suggéré un autre nom : Terje Mathisen, un optimiseur réputé en langage assembleur.
Mathisen avait écrit ses propres routines de racine carrée inverse rapide, mais il a affirmé que celle-ci n’était pas identique à ce qu’il avait écrit. La piste a ensuite mené à Gary Tarolli, cofondateur du fabricant de cartes graphiques 3dfx. Tarolli a reconnu le code. Il l’avait beaucoup utilisé et avait même retouché la constante des années plus tôt, lorsqu’il travaillait sur des projets pour les stations de travail Indigo de Silicon Graphics, mais il a dit ne pas pouvoir s’attribuer son invention.
À ce stade, l’enquête semblait au point mort. Puis, après que l’histoire s’est répandue en ligne, un programmeur nommé Greg Walsh s’est manifesté.
Ce que montrent les sources
Selon l’article de suivi de Beyond3D, Walsh a écrit la racine carrée réciproque rapide lorsqu’il travaillait chez Ardent Computer, une entreprise qui construisait des mini-ordinateurs graphiques dotés de processeurs vectoriels maison. Il avait besoin d’une voie plus rapide pour les logiciels qui ne pouvaient pas utiliser le matériel vectoriel. Le germe de l’idée, selon l’article, venait de sa collaboration avec Cleve Moler, le mathématicien créateur de MATLAB, qui explorait à l’époque l’approximation de Newton-Raphson.
Le meilleur récit disponible est donc le suivant : un ingénieur d’une éphémère entreprise de matériel l’a écrite, ses collègues et l’industrie graphique se la sont transmise, et elle a fini dans un moteur de jeu qui l’a rendue célèbre. C’est moins cinématographique qu’un génie solitaire. C’est aussi ainsi que circule réellement la plupart du code astucieux.
Pourquoi l’astuce fonctionne
La véritable histoire est meilleure, car l’astuce elle-même n’a rien de magique. Un float de 32 bits stocke un exposant et une fraction. Si l’on lit ces mêmes 32 bits comme un entier, on obtient une approximation grossière et mise à l’échelle du logarithme en base 2 du nombre.
C’est important, car 1/√x n’est rien d’autre que x élevé à la puissance moins un demi. En logarithmes, cela revient à « multiplier le logarithme par moins un demi ». Décaler l’entier d’un bit vers la droite le divise par deux. Le soustraire d’une constante soigneusement choisie inverse le signe et corrige l’échelle. Réinterpréter les bits comme un float donne une première estimation étonnamment proche. Une seule étape de la méthode de Newton vient ensuite l’affiner.
En 2003, Chris Lomont a analysé la fonction et constaté qu’après cette unique étape de raffinement, son erreur relative reste inférieure à environ 0,18 %. Il a aussi cherché la meilleure constante possible et en a trouvé une très légèrement plus performante, 0x5f375a86. Plus tard, des chercheurs ont dérivé la constante de manière analytique. Le fameux nombre était le fruit d’une bonne ingénierie, pas une valeur mystique.
Pourquoi le mythe survit
La version Carmack persiste parce qu’elle a tout ce qu’il faut à une légende : un nom célèbre, un jeu célèbre, une constante incompréhensible et un gros mot dans un commentaire. « Quelqu’un chez Ardent Computer, inspiré par Cleve Moler » se prête moins bien à un tweet.
Mais le mythe cache la partie utile aux programmeurs qui travaillent au quotidien. Les bonnes astuces sont rarement inventées en un seul endroit. Elles sont découvertes, partagées, ajustées et réutilisées, et la personne dont le nom finit par y être associé n’est souvent que le dernier maillon de la chaîne.
Le code a aussi vieilli. Les processeurs modernes disposent d’instructions dédiées aux racines carrées réciproques approchées, et les compilateurs C actuels considèrent ce cast de pointeur entre float et long comme un comportement indéfini : le nouveau code devrait donc plutôt recourir à une copie de bits sûre. Ce hack a sa place dans un musée des bonnes idées, pas dans une nouvelle base de code.
Pour raconter correctement l’histoire en une phrase : Quake III a rendu célèbre la racine carrée inverse rapide, Carmack ne l’a pas écrite, et les indices les plus solides désignent Greg Walsh, qui s’appuyait sur des idées tirées de Cleve Moler.
Sources
- id Software, code source de Quake III Arena (GPL), q_math.c
- Rys Sommefeldt, Beyond3D : Origin of Quake3's Fast InvSqrt()
- Rys Sommefeldt, Beyond3D : Origin of Quake3's Fast InvSqrt(), Part Two
- Chris Lomont, « Fast Inverse Square Root » (2003)
- Moroz et al., « Fast calculation of inverse square root with the use of magic constant: analytical approach » (arXiv, 2016)
- Image à la une : une station de travail SGI Indigo des années 1990. Wolfgang Stief, Wikimedia Commons, CC0