« Fonctionnement d'un ordinateur/Les circuits de calcul flottant » : différence entre les versions
Contenu supprimé Contenu ajouté
mAucun résumé des modifications |
|||
Ligne 7 :
===L'usage d'une mémoire à interpolation===
Les circuits de calcul trigonométriques les plus simples utilisent ce qu'on appelle une '''mémoire de précalcul'''. Avec cette technique, il n'y a pas de circuit de calcul proprement dit, mais une ROM qui contient les
[[File:ALU fabriquée à base de ROM.png|centre|ALU fabriquée à base de ROM]]
Ligne 13 :
Cependant, si on utilisait cette technique telle qu'elle, la mémoire ROM serait trop importante pour être implémentée. Rien qu'avec des nombres à virgule fixe de plus de 16 bits, il faudrait une mémoire de 2^16 cases mémoire, chacune faisant 16 bits, et ce pour une seule opération. Ne parlons même pas du cas avec des nombres de 32 ou 64 bits ! Pour cela, on va donc devoir ruser pour réduire la taille de cette ROM.
Mais qui dit réduire la taille de la ROM signifie que
====Une première optimisation : les identités trigonométriques====
Ligne 25 :
Enfin, l'identité <math>\sin{a} = \sin{\pi - a}</math> permet de calculer la moitié des sinus quand l'autre est connue.
Et on peut penser à utiliser d'autres identités trigonométriques, mais pas les trois précédentes sont déjà assez intéressantes. Le problème est qu'on ne peut pas envoyer les opérandes non-précalculés. A la place, on doit transformer l'opérande non-précalculées pour obtenir un opérande
====Une seconde optimisation : l'interpolation linéaire====
Ligne 33 :
La seconde ruse n'utilise pas d'identités trigonométriques qui donnent un résultat exact, mais calcule une approximation du résultat, sauf pour les opérandes précalculés. L'idée est de prendre les deux (ou trois, ou quatre, peu importe) résultats précalculés les plus proches du résultat voulu, et de les utiliser pour faire une approximation.
L'approximation du résultat se calcule en faisant une '''interpolation linéaire''', à savoir une moyenne pondérée des deux résultats les plus proches. Par exemple, si on connait le résultat pour sin(45°) et pour sin(50°), alors on peut calculer sin(47,5°), sin(47°), sin(45,5°), sin(46,5°) ou encore
Le circuit qui permet de faire cela est appelée une '''mémoire à interpolation'''. Le schéma de principe du circuit est illustré ci-contre, alors que le schéma détaillé est illustré ci-dessous.
Ligne 161 :
La division fonctionne sur le même principe que la multiplication, si ce n'est que les calculs sont quelque peu différents : les exposants sont soustraits et que les mantisses sont divisées.
Pour le démontrer, prenons deux flottants <math>m_1 \times 2^{e_1}</math> et <math>m_2
: <math>\frac{m1 \times 2^{e_1}}{m2
On applique les règles sur les fractions :
Ligne 217 :
Maintenant, nous allons fabriquer une unité de calcul pour les flottants logarithmiques. Nous avions vu les flottants logarithmiques dans le chapitre [[Fonctionnement d'un ordinateur/Codage des nombres|Codage des nombres]]. Pour résumer rapidement, ce sont des flottants qui codent uniquement un bit de signe et un exposant, mais sans la mantisse (qui vaut implicitement 1). L'exposant stocké n'est autre que le logarithme en base 2 du nombre codé, d'où le nom donné à ces flottants. Au passage, l'exposant est stocké dans une représentation à virgule fixe.
Nous avions dit dans le chapitre sur le codage des nombres que l'utilité de cette représentation est de simplifier certains calculs, comme les multiplications, divisions, puissances, etc.
===La multiplication et la division de deux flottants logarithmiques===
|