Website-Icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Schnelle inverse Quadratwurzel in Delphis Objekt Pascal

delphi fast inverse square root quake 3 arena 3

Macht Delphi Sie zu einem besseren Programmierer? Ist Object Pascal-Code besser lesbar?

Es gibt einen Algorithmus mit einer Mystery-Konstante , der in John Carmacks Quake III Arena C-Code berühmt wurde, um die inverse Quadratwurzel einer 32-Bit-Gleitkommazahl schnell abzuschätzen.

[crayon-673fb00834917807558639/]

Den Code verstehen

Es basiert auf Newtons Methode zur Schätzung von Wurzeln. Außerdem konvertiert es die Gleitkommazahl in eine Ganzzahl, verwendet die Bitverschiebung und beginnt mit einer Näherung von √2 ^ 127. Die auskommentierte Zeile ermöglicht eine zusätzliche Iteration zur Verbesserung der Schätzung, die in der Quate III Arena nicht verwendet wurde. Sie können mehr darüber in Wikipedia lesen oder sich einige YouTube-Videos zum Thema ansehen [einschließlich eines sehr tiefen Tauchgangs ]. Hier ist ein schönes High-Level-Video :

Kann Delphi es besser machen?

Der Facebook-Nutzer Toon Krijthe zeigte, wie viel klarer und einfacher der Code wäre, wenn er in Object Pascal / Delphi implementiert würde.

[crayon-673fb00834920911871572/]

Es verwendet das absolute Schlüsselwort, um die Gleitkommazahl der Ganzzahl zuzuordnen, wodurch alle „bösen Gleitkomma-Bit-Level-Hacking“ vermieden werden Dies ist etwas, das ich an Delphi und Object Pascal liebe: Es gibt Ihnen Zugriff auf Zeiger, Rohspeicher usw., zwingt Sie jedoch nicht dazu, es zu verwenden, wenn Sie es nicht wollen / müssen. Kürzerer Code ist nicht immer einfacher zu verstehen. Sehen Sie sich nur einen regulären Ausdruck an. Dies ist jedoch eine Verbesserung, da so viel überflüssiger Code entfernt wird. Viel besser lesbar.

 
 
„Jeder Dummkopf kann Code schreiben, den ein Computer verstehen kann. Gute Programmierer schreiben Code, den Menschen verstehen können. “
Martin Fowler
Software Engineer
Author of „Refactoring“

 

Object Pascal ist so lesbar, dass Programmierer besser werden, da ihr Code besser lesbar und wartbar ist. Versteh mich nicht falsch, du kannst Spaghetti in jeder Programmiersprache / Syntax schreiben, aber es hilft, mit einer lesbaren zu beginnen. Aus diesem Grund gibt es so viele „Legacy“ -Delphi-Programme: Sie sind erfolgreich und wartbar. Code, der nicht funktioniert oder nicht gewartet werden kann, wird verworfen oder neu geschrieben.

Benötigen Sie mehr Hochleistungsmathematik?

Erik van Bilsen
Embarcadero MVP
Co-Founder of Grijjy, inc.
Author of neslib/FastMath

Wenn Sie nach schnelleren mathematischen Routinen für Delphi suchen, besuchen Sie die Hochleistungs-FastMath-Bibliothek von Embarcadero MVP Erik van Bilsen von Grijjy.

FastMath – Schnelle Mathematikbibliothek für Delphi

FastMath ist eine Delphi-Mathematikbibliothek, die für eine schnelle Leistung optimiert ist (manchmal auf Kosten einer fehlenden Fehlerprüfung oder eines geringen Genauigkeitsverlusts).

Dies macht FastMath ideal für leistungsstarke mathematikintensive Anwendungen wie Multimedia-Anwendungen und Spiele. Für eine noch bessere Leistung bietet die Bibliothek eine Vielzahl von „ungefähren“ Funktionen (die alle mit einem  FastPräfix beginnen). Diese können sehr schnell sein, aber Sie verlieren etwas (manchmal überraschend wenig) Genauigkeit. Bei Spielen und Animationen ist dieser Genauigkeitsverlust normalerweise durchaus akzeptabel und wird durch die Geschwindigkeitssteigerung aufgewogen. Verwenden Sie sie jedoch nicht für wissenschaftliche Berechnungen…

Die mobile Version verlassen