Bonjour à tous!
Il fallait écrire un calcul rapide de Sin et Cos. La base des calculs a été l'expansion de la série Taylor. Je l'utilise dans des systèmes 3D (OpenGL et la bibliothèque graphique de mon développement). Malheureusement, il est impossible de réduire le nombre d’idéal pour Double, mais cela est compensé par une bonne accélération. Le code est écrit dans l'assembleur de Delphi XE6. Utilisé par SSE2.
Ne convient pas pour le calcul scientifique, mais complètement pour une utilisation dans les jeux.
La précision est suffisante pour couvrir la longueur du nombre de Single, qui est utilisé
pour la multiplication par une matrice.
En résumé:
- La précision obtenue est: 10.e-13
- L'écart maximal avec le processeur est de 0,00000000000000045.
- La vitesse est augmentée par rapport au processeur de 4,75 fois.
- La vitesse est augmentée de 2,6 fois par rapport à Math.Sin et Math.Cos.
Pour le test, j'ai utilisé un processeur Intel Core-i7 6950X Extreme 3.0 GHz.
Le code source de Delphi est incorporé dans les commentaires de l'assembleur.
Code source:
Cap 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,
Exemple de travail iciLes suggestions et commentaires constructifs sont les bienvenus.