Ícone do site Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Raiz quadrada inversa rápida no objeto Pascal de Delphi

delphi fast inverse square root quake 3 arena 3

O Delphi torna você um programador melhor? O código Object Pascal é mais legível?

Há um algoritmo com uma constante misteriosa que ganhou fama no código Quake III Arena C de John Carmack por estimar rapidamente a raiz quadrada inversa de um número de ponto flutuante de 32 bits.

[crayon-6742ab2c7488c140373632/]

Compreender o Código

É baseado no método de Newton para estimar raízes. Além disso, ele converte o número de ponto flutuante em um inteiro, usa deslocamento de bits e começa com uma aproximação de √2 ^ 127. A linha comentada permite uma iteração adicional para melhorar a estimativa, que não foi utilizada no Quate III Arena. Você pode ler mais sobre isso na Wikipedia ou assistir a alguns vídeos do YouTube sobre o assunto [incluindo um mergulho muito profundo ]. Aqui está um bom vídeo de alto nível :

A Delphi pode torná-lo melhor?

O usuário do Facebook Toon Krijthe mostrou como o código seria muito mais claro e simples se fosse implementado em Object Pascal / Delphi.

[crayon-6742ab2c74894244394621/]

Ele faz uso da palavra-chave absoluta para mapear o número de ponto flutuante para o inteiro, o que evita todos os “hackers de nível de bit de ponto flutuante maligno”. Isso é algo que adoro no Delphi e no Object Pascal: ele dá acesso a ponteiros, memória bruta etc., mas não o força a usá-lo quando não quiser / precisar. O código mais curto nem sempre é mais fácil de entender, basta dar uma olhada em qualquer expressão regular, mas isso é uma melhoria porque remove muitos códigos estranhos. Muito mais legível.

 
 
 
“Qualquer idiota pode escrever um código que um computador possa entender. Bons programadores escrevem códigos que humanos podem entender”
Martin Fowler
Software Engineer
Author of “Refactoring”

 

O Object Pascal é tão legível que torna os programadores melhores, pois torna seu código mais legível e sustentável. Não me entenda mal, você pode escrever spaghetti em qualquer linguagem / sintaxe de programação, mas começar com uma legível ajuda. É por isso que existem tantos programas Delphi “Legados”: Eles são bem-sucedidos e podem ser mantidos. Código que não funciona ou não pode ser mantido é descartado ou reescrito.

Precisa de mais matemática de alto desempenho?

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

Se você está procurando rotinas matemáticas mais rápidas para Delphi, verifique a Biblioteca de High-Performance FastMath do Embarcadero MVP Erik van Bilsen, famoso por Grijjy.

FastMath – Biblioteca Fast Math para Delphi

FastMath é uma biblioteca matemática Delphi otimizada para desempenho rápido (às vezes ao custo de não realizar a verificação de erros ou perder um pouco de precisão).

Isso torna o FastMath ideal para aplicativos de alto desempenho com uso intensivo de matemática, como aplicativos de multimídia e jogos. Para um desempenho ainda melhor, a biblioteca oferece uma variedade de funções “aproximadas” (todas começam com um  Fastprefixo). Isso pode ser muito rápido, mas você perderá alguma precisão (às vezes surpreendentemente pequena). Para jogos e animação, essa perda de precisão é geralmente perfeitamente aceitável e compensada pelo aumento na velocidade. Não os use para cálculos científicos …

Sair da versão mobile