ArcSinus et ArcTangente |
Calcul de Arc Tangente |
Pour calculer l' ArcTangente(Y) on part d'un vecteur d'extrémité (1, Y). L'angle formé par ce vecteur avec l'axe horizontal a la valeur cherchée. Pour mesurer cet angle, on fait subir au vecteur une suite de "pseudoRotations" pour l'amener à l'horizontal, et on cumule les angles arctg (2-j ) de ces "pseudoRotations" (la constante k n'intervient pas ici). |
X0 = 1 ; Y0 = Y ; A0 = 0 ; si Yj > 0 alors { Xj+1 = Xj + Yj * 2-j ; Yj+1 = Yj – Xj * 2-j ; Aj+1 = Aj – arctg(2-j ) ; } sinon { Xj+1 = Xj – Yj * 2-j ; Yj+1 = Yj + Xj * 2-j ; Aj+1 = Aj + arctg(2-j ) ; } |
Sinus, Cosinus et Arc Tangente |
En "retournant" le calcul de sinus/cosinus, l'applet calcule arc tangente. Le "Nombre de bits"
fixe à la fois le nombre de pas et la précision des calculs. Cliquer la flèche verticale ![]() |
Calcul de Arc Sinus |
Pour calculer l' ArcSinus(S) on part d'un vecteur horizontal de module k et on
lui fait subir une suite de "pseudoRotations" pour amener son module à 1 et l'ordonnée
Y de son extrémité à S. L'angle formé par ce vecteur avec l'horizontale a la valeur
cherchée.
Cet algorithme donne un résultat médiocre. En effet le vecteur est trop court (son module croit
de 0,858773 à 1) pour que son extrémité soit sur le cercle et en conséquence la comparaison
de l'ordonnée Y de son extrémité avec S est parfois erronée. A chaque itération,
le module du vecteur est multipliée par Ö1+2-2j, multiplier
S par la même constante rendrait la comparaison totalement pertinente.
sinon
Pour chaque itération (qui gagne un bit) cet algorithme exige quatre additions/soustractions pour la double rotation, plus une addition/soustraction pour cumuler les angles arctg(2-j ) et enfin une addition pour multiplier S par la constante 1+2-2j . |
![]() |
On peut précalculer puis stocker les valeurs d'une fonction en table. Cependant la taille de cette table
croît très vite avec la précision requise, ce qui limite en pratique cette approche. Pour des
fonctions continues avec une faible variation de pente (cas de nombreuses fonctions), on peut ne stocker que quelques
points dans une première table "TIV", et les pentes permettant l'interpolation sans calcul dans
une autre table "TO". L'applet ci-dessous rempli les tables pour les fonctions et les intervalles listés à gauche et permet d'observer graphiquement le résultat. La valeur des tables est imprimable en VHDL. Pour ajouter des fonctions il faudrait modifier le source Java. La fonction arcsin(x) présente une très forte variation de pente autour de 1, elle illustre les limites de la compression de table par bipartition. |