Ícono del sitio Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Raíz cuadrada inversa rápida en el objeto Pascal de Delphi

delphi fast inverse square root quake 3 arena 3

¿Delphi te convierte en un mejor programador? ¿El código Object Pascal es más legible?

Hay un algoritmo con una constante misteriosa que saltó a la fama en el código Quake III Arena C de John Carmack para estimar rápidamente la raíz cuadrada inversa de un número de coma flotante de 32 bits.

[crayon-6743eacfc4fc0395564187/]

Entendiendo el Código

Se basa en el método de Newton para estimar raíces. Además, convierte el número de punto flotante en un entero, usa el desplazamiento de bits y comienza con una aproximación de √2 ^ 127. La línea comentada permite una iteración adicional para mejorar la estimación, que no se usó en Quate III Arena. Puede leer más sobre esto en Wikipedia o ver algunos videos de YouTube sobre el tema [incluido un análisis muy profundo ]. Aquí hay un buen video de alto nivel :

¿Puede Delphi mejorarlo?

El usuario de Facebook, Toon Krijthe, mostró cuánto más claro y simple sería el código si se implementara en Object Pascal / Delphi.

[crayon-6743eacfc4fc9482997999/]

Hace uso de la palabra clave absoluta para asignar el número de punto flotante al entero, lo que evita todo el “hackeo maligno de nivel de bits de punto flotante”. Esto es algo que me encanta de Delphi y Object Pascal: te da acceso a punteros, memoria bruta, etc. pero no te obliga a usarlo cuando no quieres o necesitas. El código más corto no siempre es más fácil de entender, solo eche un vistazo a cualquier expresión regular, pero esto es una mejora porque elimina mucho código extraño. Mucho más legible.

 
 
“Cualquier tonto puede escribir un código que una computadora pueda entender. Los buenos programadores escriben código que los humanos pueden entender “.
Martin Fowler
Software Engineer
Author of “Refactoring”

 

Object Pascal es tan legible que mejora a los programadores ya que hace que su código sea más legible y fácil de mantener. No me malinterpretes, puedes escribir espaguetis en cualquier lenguaje / sintaxis de programación, pero comenzar con uno legible ayuda. Ésta es la razón por la que existen tantos programas Delphi “heredados”: son exitosos y se pueden mantener. El código que no funciona o que no se puede mantener se descarta o se reescribe.

¿Necesita más matemáticas de alto rendimiento?

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

Si está buscando rutinas matemáticas más rápidas para Delphi, consulte la biblioteca FastMath de alto rendimiento del MVP de Embarcadero Erik van Bilsen de Grijjy.

FastMath: biblioteca matemática rápida para Delphi

FastMath es una biblioteca matemática de Delphi que está optimizada para un rendimiento rápido (a veces a costa de no realizar la verificación de errores o perder un poco de precisión).

Esto hace que FastMath sea ideal para aplicaciones de alto rendimiento con uso intensivo de matemáticas, como aplicaciones y juegos multimedia. Para un rendimiento aún mejor, la biblioteca proporciona una variedad de funciones “aproximadas” (todas comienzan con un  Fastprefijo). Pueden ser muy rápidos, pero perderá algo de precisión (a veces sorprendentemente poca). Para los juegos y la animación, esta pérdida de precisión suele ser perfectamente aceptable y se ve compensada por el aumento de la velocidad. Sin embargo, no los use para cálculos científicos …

Salir de la versión móvil