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 5: Nombres à Virgule Flottante 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 le 4e videoclip de cette leçon qui a montré les faiblesses de la représentation de nombres à virgule fixe, ce 5e videoclip porte sur leur représentation dite à virgule flottante.
Représentation des nombres en virgule flottante Représentation en virgule flottante = notation scientifique en base 2 (Voir à ce sujet l’animation du Prof. Boulic http://wandida.com/fr/archives/855.) Le nombre de bits à disposition est divisé en 3 parties Signe Exposant de la base 2 Nombre normalisé en base 2 Partie entière = chiffre le plus significatif en base 2 => ne peut jamais valoir / être que 1 => inutile de le représenter => on gagne 1 bit Partie fractionnaire = mantisse => Signe 2exposant ∙ 1,mantisse Erreur relative maximum <= puissance la plus faible de la mantisse (comme pour la notation scientifique) Le précédent videoclip de cette leçon a montré les faiblesses de la représentation des nombres avec leur virgule fixe. Il a aussi montré que cette faiblesse pouvait être contournée en s’inspirant de la notation scientifique. 1 Ce qu’on appelle la représentation des nombres avec virgule flottante n’est rien d’autre que l’utilisation de la notation scientifique mais en base 2 (binaire). 2 Dans ce cas le nombre de bits disponibles pour représenter un nombre est divisé en 3 parties: 3 Le bit de signe – un seul suffit; 4 L’exposant de la base 2; 5 Et le nombre normalisé dans cette base. 6 Il est à noter que la partie entière de ce nombre, devant la virgule … 7 … en base 2 ne peut jamais valoir que 1 (si c’était 0 on pourrait glisser la virgule d’un ou plusieurs ordres de grandeur jusqu’à ce que le nouveau chiffre devant la virgule soit effectivement un 1). Il est donc inutile de représenter ce chiffre entier puisqu’il vaut toujours 1 implicitement. Cela économise donc un bit. 8 Le nombre en virgule flottante ainsi représenté vaut donc en pratique ± 2 à la puissance de l’exposant donné x 1 , la mantisse donnée. 9 Et l’erreur relative maximum sur un tel nombre est donc définie par la plus faible puissance de la mantisse, exactement comme dans le cas de la notation scientifique.
Représentation des nombres en virgule flottante: exemple Exposant => 2 bits Mantisse => 2 bits 2□□ ∙ 1,□□ => Erreur relative ≤ 2-2 = ¼ 1 Prenons un exemple concret avec 1 bit pour le signe (non représenté ici), 2 bits pour l’exposant, et 2 bits pour la mantisse. 2 Une telle représentation permet donc d’exprimer un nombre positif ou négatif dont la valeur absolue est 2 exposant 2 bits x 1,2 bits de mantisse. 3 L’erreur relative maximale sur de tels nombres est donc toujours garantie inférieure à 2-2, soit ¼. 4 Avec 2 bits d’exposant et deux bits de mantisse on peut donc représenter des nombres valant entre 20 et 24-1. exposant 01 10 11 00 1 2 4 8 16 mantisse
Représentation de 0 en virgule flottante: même exemple Pour inclure 0 on traite la plus petite puissance de la base, notée P (ici 0), comme un cas particulier qui couvre l'intervalle [0, 2P+1] avec la formule 2P+1. 0 ,□□ Mais entre les nombres positifs et les nombres négatifs, comment représenter 0? 1 Pour cela on traite la plus petite puissance de la base, notée P(ici 0), comme un cas particulier qui couvre l'intervalle [0, 2P+1] avec la formule 2P+1. 0,les 2 bits de mantisse. exposant 01 10 11 00 1 2 4 8 16 mantisse
Les erreurs d’arrondi sont inévitables Erreur d’arrondi = écart entre un nombre X et sa représentation en virgule flottante Question: quel est le motif binaire de «un dixième» ? Réponse: «Un dixième» n’est pas représentable exactement ! (parce que 10 n’est pas une puissance entière de 2) NB Ce problème existe dans toutes les bases, e.g. 1/3 en base 10 (définition des nombres rationnels!) L'erreur d'arrondi est inévitable pour la majorité des nombres MAIS elle est garantie inférieure à un seuil défini par la représentation choisie ET la représentation peut être adaptée aux besoins du problème à traiter Une observation fondamentale avec cette représentation binaire (de même qu’avec notre système décimal!) est que les erreurs d’arrondi sont inévitables. 1 On appelle erreur d’arrondi l’écart entre un nombre X et sa représentation en virgule flottante. 2 Question: quel est le motif binaire de «un dixième» ? 3 Réponse: 1/10 n’est tout simplement pas représentable exactement avec un nombre fini de bits parce que 10 n’est pas une puissance entière de 2. 4 Ce problème n’est d’ailleurs pas propre à la base 2. Il existe dans toutes les bases, y compris par exemple dans notre système décimal. C’est même la définition propre des nombres dits rationnels. 1/3 en base 10 n’est jamais exprimable exactement avec un nombre fini de chiffres Il faudrait un nombre infini de 3 … 5 Par contre si les erreurs d’arrondi sont inévitables elles sont limitées avec certitude à un plafond défini par la représentation choisie et ladite représentation peut être adaptée aux besoins du problème à traiter.
Les erreurs d’arrondi sont inévitables: exemple Exemple: a.x2 + b.x + c = 0 avec les valeurs décimales a = 0.25 b = 0.1 c = 0.01 => Discriminant Δ = b2 – 4ac = 0 en théorie MAIS avec une représentation et des calculs sur 64 bits Δ = b2 – 4ac = 9.02 10-19 en pratique ! En effet en binaire 4 et 0.25 sont représentés exactement => leur produit donne 1 exactement Par contre les erreurs d’arrondi sont inévitables sur les décimaux 0.1 et 0.01 => b2 = 0.1 * 0.1 ≠ 0.01 ≠ c et donc b2 – 1 x c ≠ 0 1 Prenons comme exemple de problème la résolution d’une équation du 2nd degré à une inconnue a.x2 + b.x + c = 0 avec les valeurs décimales a = 0.25, b = 0.1, et c = 0.01. 2 Dans ce cas le discriminant Δ = b2 – 4ac qui, dans notre exemple, vaut 0 en théorie. 3 En pratique cependant, avec une représentation et des calculs sur 64 bits Le discriminant Δ = b2 – 4ac vaudrait 9.02 10-19! 4 En effet en binaire 5 4 et 0.25 sont représentables exactement par des puissances de 2. Leur produit donne donc exactement 1. 6 Par contre les erreurs d’arrondi sont inévitables sur les décimaux b=0.1 et c=0.01 … 7 … de telle sorte que b2 = 0.1 * 0.1 qui vaut 0.01 en théorie ne vaut pas en pratique. De la même façon c = 0.01 n’est ni représentable exactement ni égale à b2. A fortiori la différence b2 – 1 x c est aussi ≠ 0.
Conséquence des erreurs d’arrondi: les tests d’égalité En virgule flottante, tester l’égalité entre un résultat et une valeur théorique est une absurdité parce qu’on a presque toujours résultat ≠ valeur théorique => Les tests d’égalité doivent être redéfinis L’égalité doit être admise et déclarée si le résultat tombe dans un intervalle de tolérance τ variable autour de la valeur théorique τ dépend de la valeur théorique l'algorithme de calcul du résultat τ 1 Une 1e conséquence immédiate de ces erreurs d’arrondi est que tester une égalité en virgule flottante entre le résultat d’un calcul et une valeur théorique est une absurdité parce le résultat sera presque toujours ≠ de la valeur théorique. 2 Les tests d’égalité doivent donc être redéfinis de telle façon que l’égalité soit admise et déclarée si le résultat tombe dans un intervalle de tolérance τ variable autour de la valeur théorique … 3 … où τ dépend de la valeur théorique et de l'algorithme de calcul du résultat … 4 … comme on le voit sur ce graphique. |résultat – valeur_théorique | < τ
Conséquence des erreurs d’arrondi: l’ordre des opérations Le résultat est différent selon l’ordre des opérations Par exemple, l’addition n’est plus associative Il existe des valeurs a, b, c telles que (a + b) + c ≠ a + (b + c) Exemple avec un standard sur 32 bits dont 23 bits de mantisse (224+ 1) + 1 -> 224+ 1 -> 224 224 + (1 + 1) = 224 + 2 => représentable exactement Bonne pratique => D’abord additionner les petits nombres entre eux avant de les additionner aux plus grands 1 Une 2nde conséquence des erreurs d’arrondi est que l’ordre des opérations peut influencer le résultat des calculs. 2 Une addition peut par exemple ne plus être associative. Il peut exister des valeurs a, b, c pour lesquelles (a + b) + c ≠ a + (b +c) 3 Si on imagine par exemple une représentation de 32 bits dont 23 bits de mantisse Ajouter 1 à 224 est sans effet parce que 1 est négligeable par rapport à 224. Donc ajouter 1 à 224 puis encore 1 au résultat ne change rien – on se retrouve toujours avec 224. Par contre ajouter d’abord 1 1a 1 puis le résultat (2) à 224 donne un résultat qui est représentable exactement et ≠ 224 4 Une bonne technique en pratique est de commencer par additionner les petits nombres entre eux pour ne pas perdre leur précision avant de les additionner aux plus grands pour préserver une précision maximale. 1 2 24
Maîtrise de la précision Pour un problème donné et son algorithme de résolution il est important de se poser les questions suivantes: De quelle précision ai-je besoin pour mes résultats ? Quelle est l'influence de l'algorithme sur la précision des résultats ? Quelle est la précision maximum disponible sur l’ordinateur qui sera utilisé ? En cas de précision insuffisante il faut Reconsidérer l'algorithme de résolution et/ou Utiliser un ordinateur offrant une représentation capable de la précision désirée => Compromis précision / coût en calcul et mémoire 1 Pour un problème donné et son algorithme de résolution il est important de se poser les questions suivantes: 2 De quelle précision ai-je besoin pour mes résultats ? 3 Quelle est l'influence de l'algorithme sur la précision des résultats ? 4 Quelle est la précision maximum disponible sur l’ordinateur qui sera utilisé ? 5 Et en cas de précision insuffisante il faut reconsidérer l'algorithme de résolution et/ou utiliser un ordinateur offrant une représentation capable de la précision désirée 6 Il faut donc faire un compromis entre la précision désirée et le coût en termes de puissance de calcul et largeur de mémoire de l’ordinateur nécessaire pour fournir cette précision.