Contexte et performances

Le coprocesseur flottant Intel 8087, lancé en 1980, a réduit le temps de calcul d’une tangente de 13 000 µs sur le processeur 8086 à environ 90 µs. Cette amélioration provient d’une implémentation matérielle de l’instruction FPTAN, qui exploite à la fois le principe CORDIC et une approximation polynomiale afin de concilier précision et rapidité.

Architecture interne du 8087

Le circuit du 8087 se compose d’un datapath central et d’une ROM de micro‑code contenant 1 648 micro‑instructions. Le datapath intègre plusieurs blocs : une ROM d’exposants fixe, une ROM de constantes (incluant les angles CORDIC), un shifter de 64 bits capable de déplacements arbitraires, et un additionneur utilisé également comme boucle de multiplication, division et racine carrée. Les registres B et SUM alimentent l’additionneur, tandis que huit registres de pile et des registres temporaires stockent les valeurs flottantes de 80 bits. Un registre de décalage conserve 16 bits d’état nécessaires aux itérations CORDIC.

Algorithme de la fonction tangente

Le calcul débute par la récupération de la valeur d’angle dans le registre d’entrée. Le processeur exécute d’abord une série d’itérations CORDIC : à chaque étape il compare l’angle résiduel à une constante atan(2⁻ⁿ) pré‑chargée dans la ROM, décale le vecteur (X, Y) d’un facteur de puissance de deux, puis ajoute ou soustrait selon le signe de l’angle. Cette boucle utilise uniquement des décalages et des additions, ce qui explique la rapidité du processus. Après un nombre fixé d’itérations (déterminé par la largeur du registre de décalage), le vecteur approximatif fournit un rapport Y/X qui constitue une première estimation de la tangente.

// Pseudo‑code simplifié d’une itération CORDIC
if (angle_residuel >= atan_table[n]) {
    angle_residuel -= atan_table[n];
    X_new = X - (Y >> n);
    Y_new = Y + (X >> n);
} else {
    X_new = X + (Y >> n);
    Y_new = Y - (X >> n);
}

Pour corriger les erreurs résiduelles inhérentes à la convergence finie du CORDIC, le 8087 applique ensuite une approximation polynomiale de faible degré sur le résultat Y/X. Cette étape, implémentée dans le micro‑code, affine la valeur finale sans introduire de multiplication coûteuse, car les coefficients du polynôme sont stockés dans la ROM de constantes et sont combinés par des additions pondérées.

Analyse des compromis

Le mélange CORDIC + polynôme permet d’obtenir une précision suffisante pour les applications de l’époque tout en conservant un temps d’exécution de l’ordre de dizaines de microsecondes. Le recours à la ROM de constantes évite le calcul dynamique d’angles, mais impose une taille fixe de la table et limite la profondeur d’itération à 16 bits d’état. L’utilisation exclusive d’opérations de décalage et d’addition réduit la consommation d’énergie du circuit, mais rend le calcul sensible aux erreurs d’arrondi accumulées dans le registre de somme de 80 bits.