Information, Calcul, Communication Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne fait partie de son cours d’introduction à l’information, à la communication, et au calcul. Il s’inscrit dans le 1er module du cours qui offre une 1e approche des notions de calcul et d’information. Information, Calcul, Communication 1. Information & Calcul – Leçon 4: Représentation de l’Information Clip 4: Nombres à Virgule Fixe J-C. Chappelier, R. Boulic, commentaire: P. Janson
Plan de la leçon 1. Codage de l’information en binaire Unité élémentaire d'information Bits et bytes (octets) 2. Nombres entiers Représentation positionnelle Grandeur et limites 3. Nombres négatifs Représentation et traitement 4. Nombres rationnels à virgule fixe Représentation et erreurs => notation scientifique 5. Nombres rationnels à virgule flottante Représentation et approximation => précision 6. Représentation d’informations non-numériques Après avoir illustré comment représenter des nombres entiers naturels et négatifs, le 4e clip de cette leçon va suggérer une 1e façon de représenter des nombres à virgules. Il montrera immédiatement les limitations d’une telle représentation et lèvera un coin de voile sur une façon plus satisfaisante de procéder.
Représentation des nombres à virgule: 1e idée: virgule fixe Avec n bits le domaine des entiers positifs couverts est [0, 2n-1] Idée pour représenter les nombres à virgule On dilate ce domaine à une échelle α et on le décale de β MIN = β α MAX = β + α.(2n-1) Ex: MIN = 2 α = 0.2 MAX = 2 + 0.2(24-1) (n=4) => Avec n bits les 2n valeurs représentables sont uniformément réparties dans l’intervalle [MIN, MAX] et séparées par la quantité α. (Voir vidéoclip du Prof. Boulic http://wandida.com/fr/archives/823) 1 Nous avons bien compris qu’avec n bits on peut représenter 2n-1 nombres (entiers) différents. 2 Essayant d’appliquer cette observation aux nombres à virgules, une 1e idée qui vient naturellement à l’esprit consisterait à diviser les unités en intervalles (demis, quarts, 5es, 10es, etc.) pour représenter des valeurs intermédiaires et à décaler cette échelle selon les besoins pour exprimer des valeurs ± grandes. 3 Si on désigne par β le décalage et par α la grandeur des intervalles, le plus petit nombre représentable est β et le plus grand β + α.(2n-1). 4 Si on prend par exemple β=2 et α=0.2, et qu’on dispose de n=4 bits, le plus petit nombre représentable est 2 et le plus grand 2 + 0.2(24-1) = 5. 5 On peut ainsi représenter 16 nombres échelonnés tous les 2/10 d’unités de 2 à 5. 6 Plus généralement, avec n bits on peut représenter les 2n valeurs uniformément réparties tous les α entre le minimum β et le maximum β + α.(2n-1). C’est ce qu’on appelle la représentation de nombres à virgule fixe, fixe parce que α et β permettent de se décaler et de “zoomer” sur l’échelle numérique pour représenter tout nombre où que se trouve sa virgule originale. Voyez à ce sujet le vidéoclip animé du Prof. Boulic. 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0
Observation sur cette représentation à virgule fixe Il y a une quantité infinie de nombres à virgule entre MIN et MAX => Ils sont au mieux approchés par l’une des 2n valeurs représentables Ex: π = 3.1415… MIN = β α MAX= β + α.(2n-1) Ex: MIN = 2 α = 0.2 MAX= 2 + 0.2(24-1) => Erreur absolue dite de discrétisation ou de quantification égale au maximum à α sur tout l’intervalle [MIN, MAX] Ceci dit, cette 1e idée mène à une 1e observation. 1 Dans l’intervalle entre le minimum et le maximum, il y a une quantité infinie de nombres à virgule et seuls ceux tombant sur les bornes d’intervalles sont représentables exactement. 2 Tous les autres sont au mieux approchés par l’une des 2n valeurs représentables. 3 Si on prend l’exemple de π qui est un nombre réel comprenant une infinité de chiffres, … 4 … dans le cas de la représentation conventionnelle précédente, π tombe entre 3.0 et 3.2. 5 D’une façon générale donc, la représentation de la majorité des nombres à virgules est toujours approximative vu que la vaste majorité tombent entre des bornes d’intervalles. Leurs représentations sont donc toujours systématiquement sujettes à une erreur ≤ α qu’on appelle erreur de discrétisation ou de quantification parce que la représentation de nombres comprenant plus de chiffres que ne peuvent exprimer n bits est nécessairement tronquée et donc approximative. 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0
Erreur relative sur cette représentation à virgule fixe Erreur relative ε sur un nombre X tombant dans un intervalle α = importance de l’erreur de discrétisation δX par rapport à ce nombre X = |δX|/|X| => Erreur relative ε (en %) importante quand δX est grand par rapport à X => Erreur relative ε non-uniforme sur le domaine couvert [MIN, MAX] Plus importante pour les nombres proches de MIN Moins importante pour les nombres proches de MAX => Inacceptable pour la plupart des problèmes (Voir vidéoclip du Prof. Boulic http://wandida.com/fr/archives/671) Mais avec cette 1e idée de représentation à virgule fixe il y a plus grave. 1 On désigne par l’erreur relative ε sur un nombre X tombant dans un intervalle α l’importance de l’erreur de discrétisation δX par rapport à ce nombre X, ç.à.d. le rapport de |δX| à |X|. 2 Avec notre 1e idée de représentation des nombres à virgule (fixe), l’erreur relative ε (en %) devient importante quand δX est grand par rapport à X ou en d’autres termes quand X est petit par rapport à δX. 3 Puisque cette erreur relative dépend de la valeur de X alors que δX est donné par α et β, elle est non-uniforme sur le domaine couvert entre β et β+α.(2n-1), plus grossière pour les nombres proches de β, et moins grossière pour les nombres proches de β+α.(2n-1) … 4 … ce qui est bien entendu inacceptable dans la majorité des cas car cela voudrait dire que plus les valeurs manipulées sont petites, plus les calculs perdent en précision. Voyez à ce sujet le vidéoclip animé du Prof. Boulic.
Exemple n=3, β=0, α =0.5 => domaine couvert = [0, 3.5] => Seules 8 valeurs représentables exactement: 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5 Pour mieux cerner ce problème, prenons par exemple n=3 bits, β=0, α =0.5 Avec ces valeurs, le domaine des nombres à virgule couverts irait de 0 à 3.5. Mais seules 8 valeurs serait représentables exactement dans cet intervalle: 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5 1 On peut visualiser graphiquement la non-uniformité de l’erreur relative de représentation pour chaque intervalle de 0 à 3.5. 2 On voit tout de suite que pour tout nombre tombant dans le 1er intervalle de 0 à 0.5, δX= X donc ε = 1, soit 100% d’erreur relative, ce qui est normalement inacceptable. 3 Le problème diminue au fur et à mesure des intervalles successifs. Néanmoins pour X=1.45 (entre 1 et 1.5) on a encore δX = 0.45 donc ε = 31%. 4 … et ainsi de suite. Erreur relative ε en % pour une approximation par troncation 100% 75% 50% 25% Pour X < 0.5, δX= X donc ε = 100% 0.5 1 1.5 2 2.5 3 3.5 Pour X = 1.45, δX = 0.45 donc ε = 31%
Une représentation avec erreur relative uniforme ? Compromis inévitable Garantir une erreur relative uniforme => Accepter une erreur absolue croissante sur le domaine couvert ! Inspiration Notation scientifique avec un nombre fixe de chiffres significatifs => ±X,mantisse . 10±exposant ou ±X,mantisse E±exposant La question qui se pose naturellement à ce stade est celle de savoir si on peut imaginer une représentation qui ne souffre pas de ce problème. 1 Il en existe une heureusement mais pour y arriver on doit faire une concession inévitable: Pour garantir une erreur relative uniforme à tous les ordres de grandeur il faut accepter une erreur absolue croissante avec l’ordre de grandeur sur le domaine couvert. 2 L’idée directrice en ce sens s’inspire de la notation scientifique bien connue selon laquelle tout nombre peut être exprimé avec une précision fixe donnée par un nombre fixe de chiffres significatifs accompagnés d’un ordre de grandeur. En pratique tout nombre peut donc être représenté de cette façon par son signe suivi d’un chiffre avant une virgule, puis une suite de chiffres appelée mantisse après la virgule, puis de la lettre E ou du nombre 10 suivi de l’exposant qui convient et qui replace ainsi la virgule au bon endroit pour le nombre représenté.
Exemple avec 3 chiffres significatifs π=3.1415… s’écrit 3.14 100 ou 3.14e0 0.0125 s’écrit 1.25 10-2 ou 1.25e-2 -7354 s’écrit -7.35 103 ou -7.35e3 => Erreur de discrétisation absolue entre 0 et 0.01 pour l’intervalle [1, 10] MAIS l’erreur relative est (quasi-)uniforme Le pire des cas est en début d'intervalle Exemple: entre 10k et 10k+1 X = 1.00999.. * 10k δX = 0.01 * 10k => Erreur de discrétisation relative ε = δX/X ≤ 1% pour tous les intervalles [10k, 10k+1 ] Pour mieux visualiser cela prenons quelques exemples avec 3 chiffres significatifs. 1 Selon cette nouvelle idée, le nombre π =3.1415… s’écrit ainsi 3.14 100 ou 3.14e0. 2 De la même façon 0.0125 s’écrit 1.25 10-2 ou 1.25e-2. 3 Même un nombre entier tel que -7354 peut s’écrire -7.35 103 ou -7.35e3. 4 Avec cette convention l’erreur de discrétisation absolue pour l’intervalle [1, 10] oscille entre 0 et 0.01. 5 Par contre l’erreur relative est (quasi-)uniforme à tous les ordres de grandeurs. 6 Le pire des cas est en début d'intervalle . 7 Prenons l’exemple de l’intervalle de 10k à 10k+1. 8 Dans le pire des cas X = 1.00999.. * 10k. 9 Mais dans tous les cas δX = 0.01 * 10k. 10 Donc dans tous les cas l’erreur de discrétisation relative ε = δX/X ≤ 1% et ce pour tous les intervalles [10k, 10k+1 ].