Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Racine carrée inverse rapide dans Object Pascal de Delphi

delphi fast inverse square root quake 3 arena 3

Delphi fait-il de vous un meilleur programmeur? Le code Object Pascal est-il plus lisible?

Il existe un algorithme avec une constante mystère qui est devenu célèbre dans le code Quake III Arena C de John Carmack pour estimer rapidement la racine carrée inverse d’un nombre à virgule flottante 32 bits.

[crayon-6729f72e37da4667019648/]

 

Comprendre le code

Il est basé sur la méthode de Newton pour estimer les racines. De plus, il convertit le nombre à virgule flottante en entier, utilise le décalage de bits et commence par une approximation de √2 ^ 127. La ligne commentée permet une itération supplémentaire pour améliorer l’estimation, qui n’a pas été utilisée dans Quate III Arena. Vous pouvez en savoir plus sur Wikipédia ou regarder des vidéos YouTube sur le sujet [y compris une plongée très approfondie ]. Voici une belle vidéo de haut niveau :

Delphi peut-il l’améliorer?

L’utilisateur de Facebook Toon Krijthe a montré à quel point le code serait plus clair et plus simple s’il était implémenté dans Object Pascal / Delphi.

[crayon-6729f72e37db0820981603/]

Il utilise le mot-clé absolu pour mapper le nombre à virgule flottante sur l’entier, ce qui évite tout «piratage au niveau des bits en virgule flottante maléfique». C’est quelque chose que j’aime chez Delphi et Object Pascal: cela vous donne accès aux pointeurs, à la mémoire brute, etc. mais ne vous oblige pas à l’utiliser lorsque vous n’en avez pas envie / besoin. Un code plus court n’est pas toujours plus facile à comprendre, jetez simplement un coup d’œil à n’importe quelle expression régulière, mais c’est une amélioration car cela supprime tellement de code superflu. Beaucoup plus lisible.

 
 
“N’importe quel imbécile peut écrire du code qu’un ordinateur peut comprendre. Les bons programmeurs écrivent du code que les humains peuvent comprendre. »”
Martin Fowler
Software Engineer
Author of « Refactoring »

 

Object Pascal est si lisible qu’il rend les programmeurs meilleurs car il rend leur code plus lisible et maintenable. Ne vous méprenez pas, vous pouvez écrire des spaghettis dans n’importe quel langage de programmation / syntaxe, mais commencer par un langage lisible aide. C’est pourquoi il existe tant de programmes Delphi «hérités»: ils sont performants et maintenables. Le code qui ne fonctionne pas ou qui n’est pas maintenable est jeté ou réécrit.

Besoin de plus de mathématiques de haute performance?

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

Si vous recherchez des routines mathématiques plus rapides pour Delphi, consultez la bibliothèque FastMath hautes performances d’ Erik van Bilsen, MVP d’Embarcadero, de renommée Grijjy.

FastMath – Bibliothèque de mathématiques rapides pour Delphi

FastMath est une bibliothèque mathématique Delphi optimisée pour des performances rapides (parfois au prix de ne pas effectuer de vérification d’erreur ou de perdre un peu de précision).

Cela rend FastMath idéal pour les applications hautes performances à forte intensité mathématique telles que les applications multimédias et les jeux. Pour des performances encore meilleures, la bibliothèque fournit une variété de fonctions «approximatives» (qui commencent toutes par un  Fastpréfixe). Celles-ci peuvent être très rapides, mais vous perdrez une certaine précision (parfois étonnamment faible). Pour les jeux et l’animation, cette perte de précision est généralement parfaitement acceptable et compensée par l’augmentation de la vitesse. Mais ne les utilisez pas pour des calculs scientifiques…

Quitter la version mobile