Hola a todos!
Era necesario escribir un cálculo rápido de Sin y Cos. La base para los cálculos fue la expansión de la serie Taylor. Lo uso en sistemas 3D (OpenGL y la biblioteca gráfica de mi desarrollo). Desafortunadamente, es imposible reducir el número de "ideal" para Double, pero esto se compensa con una buena aceleración. El código está escrito en el ensamblador en Delphi XE6. Usado por SSE2.
No apto para la informática científica, pero completamente para usar en juegos.
La precisión es suficiente para cubrir la longitud del número de Single, que se utiliza
para multiplicar por una matriz.
En resumen:
- La precisión alcanzada es: 10.e-13
- La discrepancia máxima con la CPU es 0.000000000000045.
- La velocidad aumenta en comparación con la CPU en 4.75 veces.
- La velocidad aumenta en comparación con Math.Sin y Math.Cos en 2.6 veces.
Para la prueba utilicé un procesador Intel Core-i7 6950X Extreme 3.0 GHz.
El código fuente de Delphi está incrustado en los comentarios del ensamblador.
Código fuente:
Encabezado 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,
Ejemplo de trabajo aquíSugerencias constructivas y comentarios son bienvenidos.