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 son 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 qu'on veuille 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 est classique, la somme des poids demande (Nb. poids 1) addition. Cependant la valeur des poids est choisie pour que l'exponentielle de la somme des poids s'obtienne également avec (Nb. poids) additions. En effet la valeur de l'exponentielle est un produit de rationnels (2j + 1) / 2j . La multiplication par chacun de ces rationnels se réduit à un décalage et une addition.

 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 la droite S=R, correspondant à qj = '0', est nécessaire car sans elle 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 pseudo multiplications

La suite de multiplications conditionnelles par 1 ou (1 + 2-j ) ou (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 "vrai" 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 "qj" pour contrôler l'addition, la soustraction ou bien l'identité. 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

Circuit de calcul de l'exponentielle X = exp ( Y )

Une "pseudo division" ( le diviseur est différent pour chaque chiffre qj du quotient Q ) calcule Sj log(1 + qj2-j) + R = Y. Une suite de "pseudo multiplications" calcule X = exp(Sj log(1 + qj2-j). Ces deux calculs se font simultanément, sans propagation de retenue, en redondant. En conséquence le résultat final X doit être converti de "CS" en binaire standard.

Exemple numérique de division

Ce tableau montre les restes partiels du diviseur "SRT" pour le calcul l'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 ).
  Quand "Nb. bits" est inférieur à 15, l'aplet affiche les constantes log(1 ± 2-j ) (en rouge) et les restes partiels Rj (en noir). Rapellons que R s'écrit avec les chiffres '-1', '0' et '1'. Le premier chiffre des constantes vaut '1' ou '-1' alors que les autres chiffres valent '1' ou '0'.

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 le Logarithme ou l'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).