C++ 5 min read

Könnten KI-Bots eine C++-Zeile wie diese erzeugen: i = 0x5f3759df - (i >> 1)?

Diesen Artikel teilen
Could AI Bots Generate a C++ Line Like This One: i = 0x5f3759df - (i >> 1);

Wissen Sie, welche C++-Codezeile Millionen von Dollar wert ist?

Es war diese magische C++-Zeile: i = 0x5f3759df – (i >> 1);

Diese Zeile tauchte erstmals in der Quake-Codebasis auf, um die Berechnung der inversen Quadratwurzel zu optimieren.

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

  x2 = number * 0.5F;
  y  = number;
  i  = * ( long * ) &y;                       // evil floating point bit level hacking
  i  = 0x5f3759df - ( i >> 1 );               // what the fuck?
  y  = * ( float * ) &i;
  y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
  // y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

  return y;
}

Warum ist die Optimierung der inversen Quadratwurzel so wichtig?

Inverse Quadratwurzeln werden in der Grafik von Videospielen häufig verwendet, insbesondere in 3D-Engines. Viele Bereiche der Spieleprogrammierung – etwa Wegfindung, Beleuchtung und Reflexionen – beruhen stark auf der Normalisierung von Vektoren, wofür eine inverse Quadratwurzel benötigt wird. Ihre Berechnung umfasst jedoch Gleitkommaoperationen und kann entsprechend rechenintensiv sein.

In schnellen und visuell anspruchsvollen Spielen wie Quake III Arena werden solche Berechnungen millionenfach pro Sekunde ausgeführt. Schon eine kleine Beschleunigung kann daher die Grafikverarbeitung deutlich verbessern und letztlich die Bildrate erhöhen. Um die aufwendige Berechnung der inversen Quadratwurzel zu umgehen, entwickelten die Programmierer der id-Tech-3-Engine eine außergewöhnlich präzise und schnelle Näherung.

Ohne diese clevere Optimierung hätte Quake seinen Status als Meilenstein der Spielebranche möglicherweise nie erreicht.

Wer ist der brillante Kopf hinter dieser innovativen Lösung?

Rys Sommerfeldt, Senior Manager des European Game Engineering Teams bei AMD RTG, begann 2004 eine Untersuchung zur Herkunft der Funktion. Letztlich deutet vieles darauf hin, dass Greg Walsh ihr Autor war. Greg Walsh ist eine bedeutende Persönlichkeit der Computergeschichte. Er wirkte am Xerox PARC an der Entwicklung des ersten WYSIWYG-Textverarbeitungsprogramms („What You See Is What You Get“) mit und war an der Gründung von Ardent Computer beteiligt. Bei Ardent arbeitete Greg eng mit Cleve Moler, dem Autor von Matlab, zusammen. Cleve bezeichnete er als Inspiration für die Fast-Inverse-Square-Root-Funktion.

Diese Codezeile ist kryptisch und genial und wird von einem der legendärsten Kommentare der Softwaregeschichte begleitet. Im Zeitalter KI-gestützter Entwicklung wirft sie jedoch eine immer relevantere Frage auf:

Könnte eine KI so etwas schreiben? Sollte sie es? Und wenn nicht: warum?

Kurze Antwort: Nicht wirklich. Aber … irgendwie schon.

KI-Tools zur Codegenerierung – etwa GitHub Copilot, ChatGPT oder Google Gemini – können diese Zeile durchaus reproduzieren wenn sie genügend Kontext erhalten.

Das entscheidende Wort lautet jedoch reproduzieren, nicht erfinden.

Warum nicht? Schauen wir es uns genauer an.

1. Diese Zeile wurde nicht „entdeckt“ – sie wurde gezielt konstruiert

The constant 0x5f3759df ist eine magische Zahl, die durch Versuch und Irrtum sowie ein tiefes Verständnis von Gleitkommaformaten (IEEE 754) entstand. Dafür waren Kenntnisse in folgenden Bereichen nötig:

  • Bitgenaue Darstellung von Gleitkommazahlen
  • Binäre Näherungsverfahren
  • Performance-Engpässe in Spiele-Engines

Eine KI „muss“ diese Dinge nicht auf dieselbe Weise verstehen wie Menschen – und ohne Trainingsdaten, die genau diesen Trick zeigen, wäre es unwahrscheinlich, dass sie ihn von Grund auf selbst herleitet.

2. KI ist stark in Mustersynthese, nicht im Erfinden

LLMs (Large Language Models) lernen aus Code, den Menschen geschrieben haben. Sie verallgemeinern über Beispiele hinweg, sind aber nicht von sich aus kreativ im mathematischen Sinne. Sie:

  • kombinieren bekannte Konzepte
  • optimieren bekannte Strukturen
  • sagen wahrscheinliche nächste Tokens voraus

Wenn der Trainingsdatensatz nichts enthält, das dieser Zeile ähnelt, ist es unwahrscheinlich, dass sie in einem neuen Kontext spontan entsteht.

3. Diese Zeile ist in modernem Code ein Anti-Pattern

Aus Sicht des Software Engineerings ist diese Zeile:

  • nicht portabel
  • unsicher (aufgrund von Type Punning)
  • schwer zu lesen und zu warten

Moderne KI-Tools – insbesondere solche, die auf „sicheren“ oder „sauberen“ Code ausgerichtet sind – geben so etwas seltener aus, sofern nicht ausdrücklich nach einem „Fast-Inverse-Square-Root-Hack“.

Wann KI sie doch reproduzieren kann

Wenn Sie ChatGPT beispielsweise Folgendes fragen:

„Schreibe die Fast-Inverse-Square-Root-Funktion aus Quake III in C.“

Dann erhalten Sie wahrscheinlich:

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;
}

KI-Tools, die mit Code von GitHub und Stack Overflow trainiert wurden, haben diese Lösung bereits gesehen und geben sie auf Anfrage bereitwillig wieder.

Sie werden sie jedoch nicht selbst erfinden als eigenständige Optimierung für 1.0f / sqrt(x) – es sei denn, ihr Trainingsdatensatz enthält diesen Hack oder die Eingabeaufforderung ist sehr spezifisch.

Was uns das über menschliche und KI-Kreativität sagt

Diese Zeile – und der geniale Kommentar, der ihr folgt – erinnert daran, was menschliche Entwickler einbringen:

  • Erkenntnis: erkennen, wo die Kosten entstehen und welche Tricks helfen könnten
  • Risikobereitschaft: etwas „Böses“ tun, weil es funktioniert
  • Experimentierfreude: magische Zahlen finden, die tatsächlich funktionieren

KI kann heute unterstützen, übersetzen und optimieren – doch Zeilen wie diese entstehen aus Neugier und Intuition – Eigenschaften, die wir Maschinen erst noch beizubringen versuchen.

Abschließende Gedanken

Also: Könnte eine KI das von Grund auf selbst schreiben i = 0x5f3759df - (i >> 1);?

Noch nicht.

Solange KI nicht wirklich Gleitkomma-Interna, Performance-Hacks und unsichere Speicheroperationen ausgehend von grundlegenden Prinzipien selbst erforschen kann, werden weiterhin Menschen diejenigen sein, die solche Zeilen schreiben.

Diesen Artikel teilen