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