Olá pessoal!
Havia uma necessidade de escrever um cálculo rápido de Sin e Cos. A base para os cálculos foi a expansão na série Taylor. Eu o uso em sistemas 3D (OpenGL e a biblioteca gráfica do meu desenvolvimento). Infelizmente, é impossível reduzir o número de "ideal" para o dobro, mas isso é compensado por uma boa aceleração. O código está escrito no assembler no Delphi XE6. Usado pelo SSE2.
Não é adequado para computação científica, mas completamente para uso em jogos.
A precisão é suficiente para cobrir o comprimento do número de Single, usado
para multiplicação por uma matriz.
Em resumo:
- A precisão alcançada é: 10.e-13
- A discrepância máxima com a CPU é 0.000000000000045.
- A velocidade é aumentada em comparação com a CPU em 4,75 vezes.
- A velocidade é aumentada em comparação com Math.Sin e Math.Cos em 2,6 vezes.
Para o teste, usei um processador Intel Core-i7 6950X Extreme 3.0 GHz.
O código fonte Delphi é incorporado nos comentários do assembler.
Código fonte:
Título de spoilervar gSinTab: array of Double; gSinAddr: UInt64; const AbsMask64: UInt64 = ($7FFFFFFFFFFFFFFF); PI90: Double = (PI / 2.0); FSinTab: array[0..7] of Double = (1.0 / 6.0,
Exemplo de trabalho aquiSugestões e comentários construtivos são bem-vindos.