Chapitre 10 Arithmétique réelle - Département d`informatique
Transcription
Chapitre 10 Arithmétique réelle - Département d`informatique
Chapitre 10 Arithmétique réelle Jean Privat Université du Québec à Montréal INF2170 — Organisation des ordinateurs et assembleur Automne 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 à virgule Avant la virgule : des puissances positives de la base Après la virgule : des puissances négatives Exemples 10, 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 nombres Entiers Entiers en point fixe Signés ou non signés Flottants La place de la virgule n’est pas fixe Autres Binaire 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 flottants Forme décimale des rationnels Un signe Une partie entière Une partie fractionnaire Exemple : 12.9, 0.000419, -17.19 Forme normalisée Un signe La partie entière est nulle Une partie fractionnaire dont le premier chiffre 6= 0 Une puissance de la base Exemples : 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 754 Forme 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 Attention Le premier 1 n’est pas stocké mais est présent Un bit supplémentaire stocke le signe (pas de représentation en complément) Deux représentations : simple précision et double précision Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 8 / 26 Simple précision (32 bits) Signe (1 bit) 0 = positif 1 = 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 traditionnelle Ne 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 Exercices Convertir 0.125 Convertir 0.2 Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 10 / 26 Simple précision vers décimal Exemple 01000001001001000000000000000000 signe = 0 → positif exposant = 100000102 → 130 − 127 = 3 mantisse = 01001000000000000000000 → 1.010012 résultat = +1.010012 × 23 = 1010.012 = 10.2510 Exercice Convertir 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 particuliers Zéro Valeurs négatives trop petites Valeurs négatives trop proches de zéro Valeurs positives trop grandes Valeurs 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ée On ne peut écrire 0 avec un "1," implicite Représentation dénormalisée Si la mantisse et l’exposant sont tous à zéro, le nombre 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êmes Mantisse à 0 Exposant à 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 0 La mantisse n’a plus un "1," implicite mais un "0," L’exposant est à 0016 (vaut 2−126 ) Exemple 0 0000000 00000000000000000000001 vaut +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ées Racine carré d’un négatif Codage Signe quelconque Exposant à FF16 Mantisse 6= 0 Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 17 / 26 Table récapitulative Type Zéros Dénormalisés Normalisés Infinis NaN Jean Privat (UQAM) Exposant 0 0 0116 à FE16 FF16 FF16 10 — Arithmétique réelle Mantisse 0 6= 0 libre 0 6= 0 INF2170 — Automne 2013 18 / 26 Double précision (64 bits) Pareil mais plus grand Signe : 1 bit Exposant : 11 bits Pôle : 1023 (3FF16 ) Mantisse : 52 bits Aujourd’hui Personne 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ème On ne peut représenter tous les rationnels Il y a donc des valeurs non représentables Contrairement aux entiers, ces valeurs ne sont pas qu’aux extrémitées Travailler avec des flottants Savoir que les flottants ne sont pas précis Savoir comment minimiser l’impact de cette imprécision Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 21 / 26 Représentation infinie Rationnels infinis Certains rationnels ont une représentation finie en décimal mais infinie en binaire Exemple : 0.210 Tronquage On tronque la mantisse Exemple : 0.2 sera représenté par 0.20000000298023223876953125 Cette perte d’information se combine 0.37 + 0.2 = ? Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 22 / 26 Valeurs incommensurables Les gros mangent les petits Additionner (soustraire) deux flottants de magnitudes très différentes n’est pas une bonne idée Exemple 1E15 + 1E-15 = ? Solution Traiter les nombres par groupe de magnitude Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 23 / 26 Comparaison Comparer c’est se tromper La comparer par l’égalité de deux flottants n’est pas robuste 0.37 + 0.2 - 0.57 == 0 → ? Solution Comparer les distance Math.abs(0.37 + 0.2 − 0.57) < epsilon où epsilon est une constante (petite) sémantique au programme Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 24 / 26 Variations architecturales Processeurs Des processeurs ne respectent pas IEEE 754 Exemple : les processeurs Intel stockent les flottants sur 80 bits (plus de précision) Effet En fonction du processeur, un programme peut avoir des résultats différents Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 25 / 26 Utiliser la bonne représentation Entiers exacts Utiliser des entiers processeur si les entiers sont petits Utiliser des bibliothèques si les entiers sont grands Décimaux exacts Utiliser des entiers aussi Exemple : stocker les prix en cents avec un entier Décimaux larges Utiliser des doubles Prudence vis-à-vis de la perte de précision Ne faire confiance à personne Jean Privat (UQAM) 10 — Arithmétique réelle INF2170 — Automne 2013 26 / 26