Alles über den Fast-Inverse-Square-Root-Algorithmus
Algorithmus
32-Bit-Gleitkommazahl: Darstellung
32-Bit-Gleitkommazahl: Bit-Interpretation
- Die interne Darstellung von Gleitkommazahlen ist für Programmierer normalerweise nicht wichtig.
- Wenn man diese Darstellung jedoch gut versteht, lassen sich effiziente Algorithmen entwerfen.
- Interpretiert man das Bitmuster einer Gleitkommazahl als Ganzzahl, ergibt sich eine Näherung der Logarithmusfunktion.
log2(x) ≈ Ix / L - B
Newton-Verfahren
Fazit
- Dieser Algorithmus wurde auf Basis eines tiefen Verständnisses der internen mathematischen Details des Gleitkommasystems entworfen und nutzt Operationen, die auf Computern schnell ausgeführt werden können.
- Der genaue Ursprung des Algorithmus ist unklar, aber er ist ein Beispiel für äußerst effizientes und gut durchdachtes Engineering.
Meinung von GN⁺
- Historische Bedeutung: Dieser Algorithmus war ein innovativer Ansatz, um die Hardware-Beschränkungen der damaligen Zeit zu überwinden.
- Didaktischer Wert: Er hilft sehr dabei, die interne Struktur von Gleitkommazahlen und die zugrunde liegenden mathematischen Prinzipien zu verstehen.
- Moderne Anwendung: Auf moderner Hardware ist er möglicherweise weniger nötig, aber die Prinzipien des Algorithmus sind weiterhin nützlich.
- Optimierungspotenzial: Der Konstantenwert des Algorithmus kann optimiert werden, was Raum für weitere Forschung lässt.
- Kritische Perspektive: Da es auf moderner Hardware bessere Methoden geben kann, ist es wichtig, ihn stets mit aktuellen Technologien zu vergleichen.
2 Kommentare
Dieser faszinierende Code taucht immer wieder auf, sobald man ihn fast vergessen hat.. haha
Hacker-News-Kommentare
Unterstützung für SSE-Befehle: Computer, die nach 1999 hergestellt wurden, unterstützen den SSE-Befehlssatz, und mit dem Befehl
_mm_rsqrt_pslässt sich die inverse Quadratwurzel schnell berechnen.Fortschritte moderner Hardware: Auf moderner Hardware kann die Berechnung der inversen Quadratwurzel auf der CPU schnell erfolgen, und es ist ein Irrtum, alle Gleitkommaoperationen auf die GPU auszulagern.
MMIX-Implementierung: Es gibt Beispielcode, der die Berechnung der inversen Quadratwurzel in MMIX implementiert. Dieser Code geht ursprünglich davon aus, dass die Zahl größer als 2^-1021 ist.
Tippfehler in der Formel: In der Gleitkommaformel gibt es einen Tippfehler. Sie sollte zu
(-1)^Skorrigiert werden.Interpretation des Logarithmus: Die Interpretation des rohen Bitmusters ist keine stückweise lineare Approximation des Logarithmus. Die Linien zwischen den Datenpunkten existieren in Wirklichkeit nicht.
Wikipedia als Referenz: Es gibt auf Wikipedia eine gute Diskussion über diese Funktion und ihre Geschichte. Wikipedia-Link
GitHub-Code-Sammlung: Einige dazugehörige Codes wurden auf GitHub gesammelt. GitHub-Link
StackOverflow als Referenz: Sehenswert ist auch eine StackOverflow-Frage zu optimierten Approximationen niedriger Genauigkeit. StackOverflow-Link
Erfahrung mit der Optimierung von 3D-Engines: Schon vor Quake wurde beim Bau von 3D-Engines Optimierungserfahrung gesammelt, und algorithmische Optimierung gewinnt immer.
YouTube-Video-Empfehlung: Es gibt ein interessantes Video zu diesem Thema. YouTube-Link
Produktivitäts-Zeitdieb: Sich in dieses Thema zu vertiefen, hat viel produktive Zeit gekostet.
Optimale magische Zahl: Die magische Zahl im berühmten Code-Snippet ist nicht die optimale Konstante. Es ist möglich, eine bessere Konstante zu finden, und mit einem Jupyter-Notebook kann man die optimale magische Zahl ermitteln.