« Fonctionnement d'un ordinateur/Les circuits de calcul flottant » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 12 :
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 certaines résultats ne seront pas connus. Il y aura forcément des opérandes pour lesquelles la ROM n'aura pas mémorisé le résultat et pour lesquels la mémoire de précalcul seule ne peut rien faire. La solution sera alors de calculer ces résultats à partir d'autres résultats connus et mémorisés dans la mémoire ROM. La mémoire ROM n'a donc pas besoin de stocker tous les résultats et peu se contenter de ne mémoriser que les résultats essentiels, ceux qui permettent de calculer tous les autres. On doit distinguer deux types d'opérandes : celles dont le résultat est stocké dans la ROM, celles dont le résultat est calculée à partir des précédentes. Les opérandes dont le résultat est en ROM seront appelées des opérandes précalculés dans ce qui suit, alors que les autres seront appelées les opérandes non-précalculés.
====Une première optimisation : les identités trigonométriques====
La première manière de ruser est d'utiliser les identités trigonométriques pour calculer les résultats non-précalculés.
Par exemple, on sait que <math>\sin{-a} = - \sin{a}</math>, ce qui permet d'éliminer la moitié des valeurs stocker dans la ROM. On a juste à utiliser un comparateur et un inverseur pour faire le calcul de <math>\sin{-a}</math> à partir de celui de <math>\sin{a} </math>.
Ligne 23 ⟶ 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
====Une seconde optimisation : l'interpolation linéaire====
Ligne 29 ⟶ 31 :
[[File:Interpolation memory - principe.PNG|vignette|upright=0.75|''Interpolation memory'' - principe]]
La seconde ruse
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 sin(46°) en faisant une moyenne pondérée des deux résultats. Une telle approximation est largement suffisante pour beaucoup d'applications
|