Exponentielle et Logarithme


Fonctions élémentaires

On réalise les fonctions Exponentielle, Logarithme, Sinus, Cosinus et Arc tangente avec des additions/soustractions et des décalages fixes. Le décalage fixe est de coût et délai négligeable si l'opérateur est câblé. Les additions/soustractions sont sans propagation de retenue, donc à délai constant.

 

coût

délai max

addition/soustraction/décalage

n2

n

lecture en table (ROM)

n * 2n

log2(n)

Une lecture en table (ROM) serait plus rapide, mais la taille de la table, donc le coût, croît exponentiellement avec le nombre de bits de précision requis. Toutefois le partitionnement de la table en réduit la taille.

De la pesée du pain à l'exponentielle

Supposons que on veut calculer X = exp ( Y ). On dispose d'une balance, d'un pain dont le poids est justement Y et enfin d'une série de poids de valeur log(1 + 2-j ). La pesée nous donne le résultat cherché sous forme d'un produit de rationnels (2j + 1) / 2j .Chacune de ces multiplications se réduit à une addition et un décalage.

 Division "SRT" pour l'exponentielle

On remplace la balance par un diviseur "SRT" dont voici le "diagramme de Robertson". Un poids sur le plateau de droite (celui du pain) change sa valeur en -log(1 – 2-j ). Remarquez que le '0' est nécessaire car sans lui il y aurait un trou.

Diviseur "SRT pour l'exponentielle

Le dividende Y (en haut) est dans l'intervalle ] -1.0 , +1.0 [ . Les constantes log(1 + 2-j ) et -log(1 – 2-j ) entrant dans les cellules "tail" sont câblées . Il y a donc 4 variantes de la cellule "tail" fonction des valeurs de 2 bits.

Cellule de tête du diviseur "SRT" pour l'exponentielle

Chaque qj est choisi par une cellule "head" en fonction de j , somme pondérée des 2 chiffres poids forts r0 et r1 de l'écriture de Rj.

  • si j > 0  alors { qj = '1' ; s1 = j – 1 ; Rj+1 = Rj + log(1 – 2-j ) }//soustraction
  • si j = 0 ou j = - 0.5  alors { qj = '0' ; s1 = j ; Rj+1 = Rj + 0 } //identité
  • si j < - 0.5  alors { qj = '-1' ; s1 = j + 1 ; Rj+1 = Rj + log(1 + 2-j ) } //addition

Suite de multiplications

La suite de multiplications conditionnelles par 1, par (1 + 2-j ) ou par (1 – 2-j ) nécessite une seule propagation de retenue finale grâce à des additionneurs en "CS" et des décalages câblés. Les additions en "CS" sont tronquées à 2 n chiffres, dont trois avant la virgule. Le troisième chiffre poids fort ( tout à gauche ) est le signe. Bien que les résultats partiels soient tous positifs, exécuter des soustractions en "CS" entraîne un signe parfois non résolu. Le résultat final (en bas) doit être traduit de "CS" en binaire par une addition (avec propagation). La fenêtre en bas permet de comparer le produit "vraie" des multiplications (sans troncature) au produit avec troncature.

Cellule "ME"

La cellule "ME" est une variante de la cellule d'addition "CS" avec en plus une entrée "aj" pour contrôler l'addition ou bien la soustraction. Observer que l'activité de la retenue entrante "e" ne se propage pas vers la retenue sortante "h".

  • si qj = '-1' alors 2*co + s = eg + ed + ci // addition
  • si qj = '0' alors 2*co + s = eg + ci // identité
  • si qj = '1' alors 2*co + s = eg + 2 – ed + ci // soustraction

Exemple numérique de division

Ce tableau montre les restes partiels du diviseur "SRT" pour le calcul d'exponentielle. La fenêtre du bas permet de comparer la valeur "vraie" de l'exponentielle au produit de multiplications par (1 + 2-j ) ou par (1 – 2-j ).

Exemple numérique de conversion

Ce tableau montre les résultats partiels des multiplications par (1 + 2-j ) ou par (1 – 2-j ) effectués par des additions sans propagation tronqués. La fenêtre du bas permet de comparer le produit "vraie" des multiplications (sans troncature) au produit avec troncature.
 Extension du domaine Le circuit précédent fonctionne pour Y dans ] -1 , +1 [ . Pour l'exponentielle d'un nombre Y quelconque, on écrit Y = Q*log(8) + R, où Q est le quotient entier de la division de Y par log(8) et R < log(8) < 1. Alors exp(Y) = 8Q * exp(R) = 23Q * exp(R). Comme exp(R) < 1, cette exponentielle est calculable par le circuit précédent.

Logarithme et exponentielle



Le même opérateur calcule Logarithme ou d'Exponentielle avec des additions/soustraction (c'est la même opération), des décalages et des constantes. Les constantes sont log(1 + 2-j ) et -log (1 – 2-j ) et les chiffres q j Î{ '-1' , '0' , '1' }. Cette souplesse dans le choix des chiffres, qui fera malheureusement défaut pour Sinus et Cosinus, permet d'éviter la propagation de retenue (sauf pour l'addition finale).