CORDIC (sigle de COordinate Rotation DIgital Computer, « calcul numérique par rotation de coordonnées ») est un algorithme de calcul des fonctions trigonométriques et hyperboliques, notamment utilisé dans les calculatrices. Il a été décrit pour la première fois en 1959 par Jack E. Volder. Il ressemble à des techniques qui avaient été décrites par Henry Briggs en 1624. Il s'agit d'un algorithme de choix lorsque aucune implantation matérielle d'un multiplicateur n'est disponible (sur certains microcontrôleurs simples ou des FPGA). De plus, l'algorithme du CORDIC s'adapte bien au calcul à la chaîne. À l'origine, la programmation du CORDIC reposait sur un système binaire. Durant les années 1970, les versions décimales du CORDIC (avec des nombres codés en BCD) commencèrent à apparaître, notamment dans les calculatrices où les critères de coût du matériel sont plus importants que la vitesse de traitement. Un autre avantage du CORDIC est sa flexibilité puisqu'il permet de calculer plusieurs fonctions avec quasiment le même code. CORDIC permet de déterminer le sinus ou le cosinus d'un angle donné en radians sous un format à virgule fixe. Pour trouver le sinus ou le cosinus d'un angle β, on recherche la coordonnée x ou y du point du cercle unité lui correspondant. CORDIC commence les calculs avec un vecteur v tel que : Durant la première itération, le vecteur subit une rotation de 45° dans le sens anti-horaire (sens trigonométrique) afin d'obtenir un nouveau vecteur v. Des itérations successives doivent engendrer une rotation du vecteur dans la bonne direction. À chaque itération, la rotation est faite d'un angle prédéterminé et moindre que le précédent. Ceci jusqu'à converger vers l'angle voulu. Plus formellement, à chaque itération i, on calcule un nouveau vecteur grâce à la multiplication du vecteur v avec la matrice de rotation R : La matrice de rotation R s'obtient selon la formule suivante : Le facteur σ prend les valeurs +1 ou -1 et sert à indiquer le sens de la rotation, γ restant positif.
Jean-Paul Richard Kneib, Markus Rexroth
Mahsa Shoaran, Uisub Shin, Cong Ding, Laxmeesha Somappa