Je voudrais calculer à la fois le sinus et le cosinus d'une valeur (par exemple pour créer une matrice de rotation). Bien sûr, je pourrais les calculer séparément, l'un après l'autre, comme suit a = cos(x); b = sin(x);
mais je me demande s'il n'y a pas une méthode plus rapide pour avoir besoin des deux valeurs.
Edit : Pour résumer les réponses jusqu'à présent :
-
Vlad dit, qu'il y a la commande asm
FSINCOS
calculant les deux (dans presque le même temps qu'un appel àFSIN
seul) -
Comme Chi remarqué, cette optimisation est parfois déjà effectuée par le compilateur (lors de l'utilisation des drapeaux d'optimisation).
-
caf a souligné, que les fonctions
sincos
ysincosf
sont probablement disponibles et peuvent être appelés directement en incluant simplementmath.h
-
tanascius L'approche consistant à utiliser une table de consultation est controversée (toutefois, sur mon ordinateur et dans le cadre d'un scénario de référence, il fonctionne trois fois plus vite que la table de consultation).
sincos
avec presque la même précision pour les points flottants 32 bits). -
Joel Goodwin J'ai trouvé un lien vers une approche intéressante d'une technique d'approximation extrêmement rapide avec une assez bonne précision (pour moi, c'est encore plus rapide que la consultation de tables).
1 votes
Voir aussi cette question sur l'implémentation native de sin/cos : stackoverflow.com/questions/1640595
1 votes
Essayez
sinx ~ x-x^3/6
ycosx~1-x^2/4
comme des approximations si vous vous souciez de la vitesse plus que de la précision. Vous pouvez ajouter des termes dans l'une ou l'autre série si vous accordez plus d'importance à la précision ( fr.wikipedia.org/wiki/Taylor_series défilement vers le bas pour la série trig taylor.) Notez qu'il s'agit d'un moyen général d'approximer n'importe quelle fonction differnable.n
temps. Ainsi, si vous avez une fonction plus importante à laquelle appartiennent les sinus et les cosinus, vous obtiendrez un gain de vitesse bien plus important si vous l'approchez au lieu d'utiliser les sin et les cos indépendamment.0 votes
Il s'agit d'une mauvaise technique avec une très mauvaise précision. Voir le post de Joel Goodwin. Les séries de Taylor ont été postées ci-dessous. Veuillez le poster comme réponse.
1 votes
Eh bien, cela dépend de vos exigences, si vous voulez de la précision, la série de Taylor sera un bon seulement si vous avez besoin de valeurs de
x
près d'un pointx_0
puis développez votre série de Taylor autour dex_0
au lieu de 0. Vous obtiendrez ainsi une excellente précision près dex_0
mais plus vous allez loin, plus les résultats sont mauvais. Vous avez probablement pensé que la précision n'était pas bonne parce que vous avez regardé l'exemple donné et l'avez essayé pour des valeurs éloignées de0
. Cette réponse est avec sin,cos étendu autour de 0.