Chapitre 10Arithmétique réelle
Jean PrivatUniversité du Québec à Montréal
INF2170 — Organisation des ordinateurs et assembleurAutomne 2013
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 1 / 26
Plan
1 Arithmétique informatique
2 Norme IEEE 754
3 Valeurs spéciales IEEE 754
4 Perte de précision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 2 / 26
Plan
1 Arithmétique informatique
2 Norme IEEE 754
3 Valeurs spéciales IEEE 754
4 Perte de précision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 3 / 26
Binaire rationnels
Nombres à virguleAvant la virgule : des puissances positives de la baseAprès la virgule : des puissances négatives
Exemples10, 2510 = 1× 10+ 2× 10−1 + 5× 10−2
1010, 012 = 23 + 21 + 2−2
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 4 / 26
Représentation des nombresEntiers
Entiers en point fixeSignés ou non signés
FlottantsLa place de la virgule n’est pas fixe
AutresBinaire codé décimal (historique)Gros entiers (langages évoluées, logiciels spécialisés)Représentation symbolique (idem)
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 5 / 26
Représentation des flottantsForme décimale des rationnels
Un signeUne partie entièreUne partie fractionnaireExemple : 12.9, 0.000419, -17.19
Forme normaliséeUn signeLa partie entière est nulleUne partie fractionnaire dont le premier chiffre 6= 0Une puissance de la baseExemples : 0.129× 102, 0.49× 10−3, −0.1719× 102
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 6 / 26
Plan
1 Arithmétique informatique
2 Norme IEEE 754
3 Valeurs spéciales IEEE 754
4 Perte de précision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 7 / 26
Norme IEEE 754Forme normalisés en base 2
Forme normalisé selon 1.f × 2e
f est la partie fractionnaire (ou mantisse)e est l’exposant de la puissance de 2
AttentionLe premier 1 n’est pas stocké mais est présentUn bit supplémentaire stocke le signe (pas dereprésentation en complément)Deux représentations : simple précision et doubleprécision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 8 / 26
Simple précision (32 bits)Signe (1 bit)
0 = positif1 = négatif
Exposant (8 bits)0016 et FF16 : spécial (plus tard)0116 à FE16 : 2−126 à 2127
7F16 : 20 = 1 (on appelle ça le pôle)
Mantisse (23 bits)Représentation traditionnelleNe pas oublier le « 1, » implicite devant
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 9 / 26
Décimal vers simple précision
Exemple−17.2510 = −10001.012 = −1.0001012 ∗ 24
Soit 1 10000011 00010100000000000000000
ExercicesConvertir 0.125Convertir 0.2
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 10 / 26
Simple précision vers décimal
Exemple01000001001001000000000000000000signe = 0 → positifexposant = 100000102 → 130− 127 = 3mantisse = 01001000000000000000000 → 1.010012
résultat = +1.010012 × 23 = 1010.012 = 10.2510
ExerciceConvertir 01000100100000000000000000000000
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 11 / 26
Plan
1 Arithmétique informatique
2 Norme IEEE 754
3 Valeurs spéciales IEEE 754
4 Perte de précision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 12 / 26
Valeurs spéciales
Cas particuliersZéroValeurs négatives trop petitesValeurs négatives trop proches de zéroValeurs positives trop grandesValeurs positives trop proches de zéro
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 13 / 26
Valeur zéro
Pas de représentation normaliséeOn ne peut écrire 0 avec un "1," implicite
Représentation dénormaliséeSi la mantisse et l’exposant sont tous à zéro, lenombre vaut zéro
Deux zéro+0 et -0 ont des représentations différentes
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 14 / 26
Infini
Utilisé pour les valeurs extrêmesMantisse à 0Exposant à FF16
Le signe indique +∞ ou −∞
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 15 / 26
Nombres dénormalisés
Nombres proches de 0La mantisse n’a plus un "1," implicite mais un "0,"L’exposant est à 0016 (vaut 2−126)
Exemple0 0000000 00000000000000000000001vaut +0, 00000000000000000000001× 2−126
(soit 2−149, de l’ordre de 10−45)
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 16 / 26
Pas des nombres
NaN (not a number)Représente des résultats erronéesRacine carré d’un négatif
CodageSigne quelconqueExposant à FF16
Mantisse 6= 0
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 17 / 26
Table récapitulative
Type Exposant MantisseZéros 0 0Dénormalisés 0 6= 0Normalisés 0116 à FE16 libreInfinis FF16 0NaN FF16 6= 0
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 18 / 26
Double précision (64 bits)
Pareil mais plus grandSigne : 1 bitExposant : 11 bitsPôle : 1023 (3FF16)Mantisse : 52 bits
Aujourd’huiPersonne n’utilise les simple précision (float)Tout le monde utilise des double précision (double)
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 19 / 26
Plan
1 Arithmétique informatique
2 Norme IEEE 754
3 Valeurs spéciales IEEE 754
4 Perte de précision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 20 / 26
Perte de précision
ProblèmeOn ne peut représenter tous les rationnelsIl y a donc des valeurs non représentablesContrairement aux entiers, ces valeurs ne sont pasqu’aux extrémitées
Travailler avec des flottantsSavoir que les flottants ne sont pas précisSavoir comment minimiser l’impact de cetteimprécision
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 21 / 26
Représentation infinieRationnels infinis
Certains rationnels ont une représentation finie endécimal mais infinie en binaireExemple : 0.210
TronquageOn tronque la mantisseExemple : 0.2 sera représenté par0.20000000298023223876953125
Cette perte d’information se combine0.37 + 0.2 = ?
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 22 / 26
Valeurs incommensurables
Les gros mangent les petitsAdditionner (soustraire) deux flottants de magnitudestrès différentes n’est pas une bonne idée
Exemple1E15 + 1E-15 = ?
SolutionTraiter les nombres par groupe de magnitude
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 23 / 26
Comparaison
Comparer c’est se tromperLa comparer par l’égalité de deux flottants n’est pasrobuste0.37 + 0.2 - 0.57 == 0 → ?
SolutionComparer les distanceMath.abs(0.37 + 0.2 − 0.57) < epsilonoù epsilon est une constante (petite) sémantique auprogramme
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 24 / 26
Variations architecturales
ProcesseursDes processeurs ne respectent pas IEEE 754Exemple : les processeurs Intel stockent les flottantssur 80 bits (plus de précision)
EffetEn fonction du processeur, un programme peut avoirdes résultats différents
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 25 / 26
Utiliser la bonne représentationEntiers exacts
Utiliser des entiers processeur si les entiers sont petitsUtiliser des bibliothèques si les entiers sont grands
Décimaux exactsUtiliser des entiers aussiExemple : stocker les prix en cents avec un entier
Décimaux largesUtiliser des doublesPrudence vis-à-vis de la perte de précisionNe faire confiance à personne
Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 26 / 26