Est de la trigonométrie gourmand en ressources?

j'ai lu dans un article quelque part que les calculs de trigonométrie sont généralement coûteux. Est-ce vrai? Et si c'est le cas, c'est pour ça qu'ils utilisent des tables de trigonométrie, Non?

EDIT: Hmm, donc si la seule chose qui change est les degrés (précis à 1 degré), est-ce qu'une table de recherche avec 360 entrées (pour chaque angle) serait plus rapide?

19
demandé sur DMan 2010-03-19 21:01:54

8 réponses

Cher est un terme relatif.

les opérations mathématiques qui seront les plus rapides sont celles qui peuvent être effectuées directement par votre processeur. Certes entier ajouter et soustraire sera parmi eux. Selon le processeur, il peut y avoir multiplication et division. Parfois, le processeur (ou un co-processeur) peut gérer les opérations à virgule flottante nativement.

les choses plus compliquées (par exemple racine carrée) nécessitent une série de ces bas-niveau les calculs à effectuer. Ces choses sont habituellement accomplies en utilisant des bibliothèques de mathématiques (écrites au-dessus des opérations natives que votre processeur peut effectuer).

tout cela se produit très très rapidement ces jours-ci, donc ""cher cela dépend de la quantité de choses que vous devez faire et de la vitesse à laquelle vous en avez besoin.

si vous êtes en train d'écrire un logiciel de rendu 3D en temps réel, alors vous devrez peut-être utiliser beaucoup de astuces mathématiques intelligentes et des raccourcis pour presser chaque bit de vitesse de votre environnement.

si vous travaillez sur des applications d'affaires typiques, il est probable que les calculs mathématiques que vous faites ne contribueront pas de façon significative à la performance globale de votre système.

17
répondu Scott Smith 2010-03-19 18:15:04

sur le processeur Intel x86, l'addition ou la soustraction de points flottants nécessite 6 cycles d'horloge, la multiplication nécessite 8 cycles d'horloge, et la division 30-44 cycles d'horloge. Mais cosine nécessite entre 180 et 280 cycles d'horloge.

c'est encore très rapide, puisque le x86 fait ces choses en matériel, mais c'est beaucoup plus lent que les fonctions mathématiques plus basiques.

10
répondu Jeffrey L Whitledge 2010-03-19 18:31:40

Depuis sin(), cos() et tan() sont des fonctions mathématiques qui sont calculés par l'addition d'une série de développeurs utilisent parfois des tables de consultation afin d'éviter les coûteux de calcul.

La différence est dans la précision et de la mémoire. Plus le besoin d'exactitude est grand, plus la quantité de mémoire requise pour la table de recherche est grande.

jetez un coup d'oeil au tableau suivant précis à 1 degré.

http://www.analyzemath.com/trigonometry/trig_1.gif

7
répondu Codebrain 2010-03-19 18:12:04

alors que la réponse rapide est qu'elles sont plus chères que les fonctions mathématiques primitives (addition/multiplication/soustraction etc...) ils ne sont pas-coûteux-en termes de temps humain. Typiquement, la raison pour laquelle les gens les optimisent avec des tables de recherche et des approximations est parce qu'ils les appellent potentiellement des dizaines de milliers de fois par seconde et chaque microseconde pourrait être utile.

si vous écrivez un programme et avez juste besoin de l'appeler quelques fois par seconde le les fonctions intégrées sont de loin assez rapides.

2
répondu Ron Warholic 2010-03-19 18:14:53

je recommande d'écrire un programme de test et de le chronométrer pour vous-même. Oui, ils sont lents par rapport à plus ou moins, mais ce sont toujours des instructions de processeur unique. Il est peu probable que ce soit un problème à moins que vous ne fassiez une boucle très serrée avec des millions d'itérations.

2
répondu Mark Ransom 2010-03-19 18:15:39

Oui, (par rapport à d'autres opérations mathématiques multiplier, diviser): si vous faites quelque chose en temps réel (Matrix ops, jeux vidéo, etc.), vous pouvez désactiver beaucoup des cycles en déplaçant vos calculs de trigo hors de votre boucle interne.

si vous ne faites pas quelque chose en temps réel, alors non, ils ne sont pas chers (par rapport à des opérations telles que la lecture d'un tas de données à partir du disque, la génération d'une page web, etc.). Trig ops sont heureusement réalisés en matériel par votre CPU (qui peut faire des milliards d'opérations en virgule flottante par seconde).

2
répondu Seth 2010-03-19 18:18:58

si vous connaissez toujours les angles que vous calculez, vous pouvez les stocker dans une variable au lieu de les calculer à chaque fois. Ceci s'applique également dans votre appel de méthode/fonction où votre angle ne va pas changer. Vous pouvez être intelligent en utilisant certaines formules (calcul de sin (theta) à partir de sin(theta/2), en sachant combien de fois les valeurs repeat - sin(theta + 2*pi*n) = sin(theta)) et en réduisant le calcul. Voir article de wikipédia

1
répondu ram 2010-03-19 18:13:43

oui, il est. fonctions trigonométriques sont calculées en additionnant une série. En des termes généraux, il serait beaucoup plus coûteux que d'une simple opération mathématique. idem pour la sqrt

0
répondu Midhat 2010-03-19 18:09:33