représentation des nombres, arithmétique flottante, norme ieee 754
TRANSCRIPT
Master Calcul Haute Performance, Simulation Université de Perpignan Via DomitiaSemestre 9 (M2) Année universitaire 2015/2016
Validation Numérique
Représentation des nombres, arithmétique flottante,norme IEEE 754
Guillaume [email protected]
Université de Perpignan Via Domitia
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 1/37
Organisation du cours “Validation Numérique”
Organisation :
I 16h de coursI 16h de TD/TP
2 intervenants :
I G. Revy 8 séances de 2h de CM/TD/TPI Ph. Langlois 8 séances de 2h de CM/TD/TP
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 2/37
Plan du cours
1. Introduction générale
2. Représentation des nombres entiers et réels
3. Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 3/37
Introduction générale
Plan du cours
1. Introduction générale
2. Représentation des nombres entiers et réels
3. Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 4/37
Introduction générale
IntroductionL’informatique est, aujourd’hui, omniprésente
I ordinateurs personnels (bureautique, audio-vidéo, jeux vidéos, ...)I outils pour la calcul numérique, de simulation, modélisation,I systèmes embarqués (audio-vidéo, téléphonie mobile, tablettes PC, ...)
En informatique, les ordinateurs effectuent des calculs
I puis-je avoir confiance en les résultats de mon ordinateur ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 5/37
Introduction générale
Bourse de Vancouver (1982)
1982 : création d’un nouvel indice de valeur initiale 1000
I recalculé après chaque transactionI tronqué après le 3e chiffre
Au bout de 22 mois : valeur calculée = 524.881 au lieu de 1098.811
Source du problème : la valeur calculée était tronquée au lieu d’être arrondie
I dans ce cas : toutes les erreurs sont de même signeI aucune compensation possible
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 6/37
Introduction générale
Bourse de Vancouver (1982)
1982 : création d’un nouvel indice de valeur initiale 1000
I recalculé après chaque transactionI tronqué après le 3e chiffre
Au bout de 22 mois : valeur calculée = 524.881 au lieu de 1098.811
Source du problème : la valeur calculée était tronquée au lieu d’être arrondie
I dans ce cas : toutes les erreurs sont de même signeI aucune compensation possible
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 6/37
Introduction générale
Missile Patriote (25 février 1991)
Échec lors de l’interception d’un Scud (Dharan, Arabie Saoudite)
I bilan : 28 morts / 100 blessés
Compteur dans la batterie du missile : ajout de 1/10 tous les dixièmes de secondeI 1/10 non représentable exactement en machineI 1/10 ≈ (0.000110011001100110011001100110011001...)2
I erreur (24 bits) ≈ 9.5×10−8 par ajout de 1/10I au bout de 100h : erreur ≈ 0.34 secondes
Vitesse du missile Scud : 1676 m/s
I au bout de 100h : erreur ≈ 568 m
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 7/37
Introduction générale
Premier vol d’Ariane 5 (4 juin 1996)
Après 39 sec. de vol : autodestruction de la fusée
I coût de la fusée / du cargot ≈ 500 millions $I coût du développement ≈ 7 milliard $
Système de Référence Inertielle (SRI) : calcule la position, la vitesse etl’inclinaison de la fusée, en fonction de mesures d’accélération et de rotation
I identique à celui d’Ariane 4I accélération 5 fois plus élevée
Forte accélération de la fusée dépassement de capacité lors du calcul desposition et vitesse
I dû à la conversion d’un nombre virgule flottante 64 bits (double) en nombre entierde 16 bits dans un logiciel en Ada
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 8/37
Introduction générale
Autres exemples de bugs
Bug du Pentium (1994) : Bug dans la fonction de division de l’unité de calcul àvirgule flottante du Pentium P5
4 195 835,0 / 3 145 727,0 = 1,333 820 449 136 241 002 <-- valeur correcte4 195 835,0 / 3 145 727,0 = 1,333 739 068 902 037 589 <-- Pentium P5
I coût ≈ 475 millions $
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Bug dans Excel 2007 : Problème d’affichage dans Excel 2007
Valeur à calculer Valeur attendue Valeur affichée dans Excel 2007
850 × 77.1
65535
100000
(850 × 77.1) + 1
65536
100001
(850 × 77.1) - 1
65534 65534
I la valeur en machine est correcte seule la valeur affichée est erronée
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/37
Introduction générale
Autres exemples de bugs
Bug du Pentium (1994) : Bug dans la fonction de division de l’unité de calcul àvirgule flottante du Pentium P5
4 195 835,0 / 3 145 727,0 = 1,333 820 449 136 241 002 <-- valeur correcte4 195 835,0 / 3 145 727,0 = 1,333 739 068 902 037 589 <-- Pentium P5
I coût ≈ 475 millions $
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Bug dans Excel 2007 : Problème d’affichage dans Excel 2007
Valeur à calculer Valeur attendue Valeur affichée dans Excel 2007
850 × 77.1
65535
100000
(850 × 77.1) + 1
65536
100001
(850 × 77.1) - 1
65534 65534
I la valeur en machine est correcte seule la valeur affichée est erronée
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/37
Introduction générale
Autres exemples de bugs
Bug du Pentium (1994) : Bug dans la fonction de division de l’unité de calcul àvirgule flottante du Pentium P5
4 195 835,0 / 3 145 727,0 = 1,333 820 449 136 241 002 <-- valeur correcte4 195 835,0 / 3 145 727,0 = 1,333 739 068 902 037 589 <-- Pentium P5
I coût ≈ 475 millions $
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Bug dans Excel 2007 : Problème d’affichage dans Excel 2007
Valeur à calculer Valeur attendue Valeur affichée dans Excel 2007
850 × 77.1
65535
100000
(850 × 77.1) + 1
65536
100001
(850 × 77.1) - 1
65534 65534
I la valeur en machine est correcte seule la valeur affichée est erronée
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/37
Introduction générale
Autres exemples de bugs
Bug du Pentium (1994) : Bug dans la fonction de division de l’unité de calcul àvirgule flottante du Pentium P5
4 195 835,0 / 3 145 727,0 = 1,333 820 449 136 241 002 <-- valeur correcte4 195 835,0 / 3 145 727,0 = 1,333 739 068 902 037 589 <-- Pentium P5
I coût ≈ 475 millions $
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Bug dans Excel 2007 : Problème d’affichage dans Excel 2007
Valeur à calculer Valeur attendue Valeur affichée dans Excel 2007
850 × 77.1
65535
100000
(850 × 77.1) + 1
65536
100001
(850 × 77.1) - 1
65534
65534
I la valeur en machine est correcte seule la valeur affichée est erronée
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/37
Introduction générale
Autres exemples de bugs
Bug du Pentium (1994) : Bug dans la fonction de division de l’unité de calcul àvirgule flottante du Pentium P5
4 195 835,0 / 3 145 727,0 = 1,333 820 449 136 241 002 <-- valeur correcte4 195 835,0 / 3 145 727,0 = 1,333 739 068 902 037 589 <-- Pentium P5
I coût ≈ 475 millions $
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Bug dans Excel 2007 : Problème d’affichage dans Excel 2007
Valeur à calculer Valeur attendue Valeur affichée dans Excel 2007
850 × 77.1 65535 100000
(850 × 77.1) + 1 65536 100001
(850 × 77.1) - 1 65534 65534
I la valeur en machine est correcte seule la valeur affichée est erronée
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/37
Introduction générale
Suite de J.-M. Muller
Soit un la suite définie par :u0 = 2
u1 =−4
un+1 = 111− 1130un
+ 3000(un ·un-1)
intmain(void){
float u0 = 2.0f, u1 = -4.0f;
printf("u( 0) = % 1.19e\n",u0);printf("u( 1) = % 1.19e\n",u1);
int n; for(n = 1 ; n <= 19 ; n++){float tmp = 111.f - 1130.f/u1 + 3000.f * 1/(u1*u0);printf("u(%2d) = % 1.19e\n",n+1,tmp);u0 = u1; u1 = tmp;
}
return 0;}
$> ./suite -jmmulleru( 0) = 2.0000000000000000000e+00u( 1) = -4.0000000000000000000e+00u( 2) = 1.8500000000000000000e+01u( 3) = 9.3783798217773437500e+00u( 4) = 7.8011646270751953125e+00u( 5) = 7.1545600891113281250e+00u( 6) = 6.8088302612304687500e+00u( 7) = 6.6227531433105468750e+00u( 8) = 6.9049758911132812500e+00u( 9) = 1.2952423095703125000e+01u(10) = 5.7301113128662109375e+01u(11) = 9.5321716308593750000e+01u(12) = 9.9694656372070312500e+01u(13) = 9.9981079101562500000e+01u(14) = 9.9998840332031250000e+01u(15) = 9.9999923706054687500e+01u(16) = 9.9999992370605468750e+01u(17) = 1.0000000000000000000e+02u(18) = 1.0000000000000000000e+02u(19) = 1.0000000000000000000e+02u(20) = 1.0000000000000000000e+02
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/37
Introduction générale
Suite de J.-M. Muller
Soit un la suite définie par :u0 = 2
u1 =−4
un+1 = 111− 1130un
+ 3000(un ·un-1)
intmain(void){
float u0 = 2.0f, u1 = -4.0f;
printf("u( 0) = % 1.19e\n",u0);printf("u( 1) = % 1.19e\n",u1);
int n; for(n = 1 ; n <= 19 ; n++){float tmp = 111.f - 1130.f/u1 + 3000.f * 1/(u1*u0);printf("u(%2d) = % 1.19e\n",n+1,tmp);u0 = u1; u1 = tmp;
}
return 0;}
$> ./suite -jmmulleru( 0) = 2.0000000000000000000e+00u( 1) = -4.0000000000000000000e+00u( 2) = 1.8500000000000000000e+01u( 3) = 9.3783798217773437500e+00u( 4) = 7.8011646270751953125e+00u( 5) = 7.1545600891113281250e+00u( 6) = 6.8088302612304687500e+00u( 7) = 6.6227531433105468750e+00u( 8) = 6.9049758911132812500e+00u( 9) = 1.2952423095703125000e+01u(10) = 5.7301113128662109375e+01u(11) = 9.5321716308593750000e+01u(12) = 9.9694656372070312500e+01u(13) = 9.9981079101562500000e+01u(14) = 9.9998840332031250000e+01u(15) = 9.9999923706054687500e+01u(16) = 9.9999992370605468750e+01u(17) = 1.0000000000000000000e+02u(18) = 1.0000000000000000000e+02u(19) = 1.0000000000000000000e+02u(20) = 1.0000000000000000000e+02
0
20
40
60
80
100
120
0 5 10 15 20
float
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/37
Introduction générale
Suite de J.-M. Muller
Soit un la suite définie par :u0 = 2
u1 =−4
un+1 = 111− 1130un
+ 3000(un ·un-1)
intmain(void){
float u0 = 2.0f, u1 = -4.0f;
printf("u( 0) = % 1.19e\n",u0);printf("u( 1) = % 1.19e\n",u1);
int n; for(n = 1 ; n <= 19 ; n++){float tmp = 111.f - 1130.f/u1 + 3000.f * 1/(u1*u0);printf("u(%2d) = % 1.19e\n",n+1,tmp);u0 = u1; u1 = tmp;
}
return 0;}
$> ./suite -jmmulleru( 0) = 2.0000000000000000000e+00u( 1) = -4.0000000000000000000e+00u( 2) = 1.8500000000000000000e+01u( 3) = 9.3783798217773437500e+00u( 4) = 7.8011646270751953125e+00u( 5) = 7.1545600891113281250e+00u( 6) = 6.8088302612304687500e+00u( 7) = 6.6227531433105468750e+00u( 8) = 6.9049758911132812500e+00u( 9) = 1.2952423095703125000e+01u(10) = 5.7301113128662109375e+01u(11) = 9.5321716308593750000e+01u(12) = 9.9694656372070312500e+01u(13) = 9.9981079101562500000e+01u(14) = 9.9998840332031250000e+01u(15) = 9.9999923706054687500e+01u(16) = 9.9999992370605468750e+01u(17) = 1.0000000000000000000e+02u(18) = 1.0000000000000000000e+02u(19) = 1.0000000000000000000e+02u(20) = 1.0000000000000000000e+02
0
20
40
60
80
100
120
0 5 10 15 20
floatdouble
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/37
Introduction générale
Suite de J.-M. Muller
Soit un la suite définie par :u0 = 2
u1 =−4
un+1 = 111− 1130un
+ 3000(un ·un-1)
intmain(void){
float u0 = 2.0f, u1 = -4.0f;
printf("u( 0) = % 1.19e\n",u0);printf("u( 1) = % 1.19e\n",u1);
int n; for(n = 1 ; n <= 19 ; n++){float tmp = 111.f - 1130.f/u1 + 3000.f * 1/(u1*u0);printf("u(%2d) = % 1.19e\n",n+1,tmp);u0 = u1; u1 = tmp;
}
return 0;}
$> ./suite -jmmulleru( 0) = 2.0000000000000000000e+00u( 1) = -4.0000000000000000000e+00u( 2) = 1.8500000000000000000e+01u( 3) = 9.3783798217773437500e+00u( 4) = 7.8011646270751953125e+00u( 5) = 7.1545600891113281250e+00u( 6) = 6.8088302612304687500e+00u( 7) = 6.6227531433105468750e+00u( 8) = 6.9049758911132812500e+00u( 9) = 1.2952423095703125000e+01u(10) = 5.7301113128662109375e+01u(11) = 9.5321716308593750000e+01u(12) = 9.9694656372070312500e+01u(13) = 9.9981079101562500000e+01u(14) = 9.9998840332031250000e+01u(15) = 9.9999923706054687500e+01u(16) = 9.9999992370605468750e+01u(17) = 1.0000000000000000000e+02u(18) = 1.0000000000000000000e+02u(19) = 1.0000000000000000000e+02u(20) = 1.0000000000000000000e+02
0
20
40
60
80
100
120
0 5 10 15 20
floatdouble
theorique
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/37
Introduction générale
Quelles sont les propriétes d’une bonne arithmétique ?
Rapidité des calculs
I calcul rapide de la trajectoire d’un missile de défense aérienne
Précision des calculs
I calcul correct de cette trajectoire
Dynamique des valeurs représentées
I représenter des valeurs très petites et très grandes
Portabilité des calculs
I reproductibilité des résultats d’un programme d’une machine à une autre
Facilité d’utilisation et d’implantation
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 11/37
Introduction générale
Lien avec la qualité numérique d’un logiciel
Dans un programme (logiciel) numérique, les erreurs sont principalement dues :
I à la difficulté de traduire un problème mathématique en une implantation dans unlangage de programmation erreurs de méthode,
I à l’arrondi des données d’entrées du problème (données physiques ou de capteur,par exemple) erreurs de données,
I à l’imprécision de l’arithmétique utilisée erreurs d’arrondi.
Comment déterminer et contrôler ces erreurs d’arrondi ?
I en encadrant les erreurs par des intervalles,I en augmentant la précision de calcul ou en compensant les erreurs d’arrondi, afin
d’améliorer la précision du résultat calculé,I en calculant les solutions exactes,I ...
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 12/37
Introduction générale
Lien avec la qualité numérique d’un logiciel
Dans un programme (logiciel) numérique, les erreurs sont principalement dues :
I à la difficulté de traduire un problème mathématique en une implantation dans unlangage de programmation erreurs de méthode,
I à l’arrondi des données d’entrées du problème (données physiques ou de capteur,par exemple) erreurs de données,
I à l’imprécision de l’arithmétique utilisée erreurs d’arrondi.
Comment déterminer et contrôler ces erreurs d’arrondi ?
I en encadrant les erreurs par des intervalles,I en augmentant la précision de calcul ou en compensant les erreurs d’arrondi, afin
d’améliorer la précision du résultat calculé,I en calculant les solutions exactes,I ...
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 12/37
Introduction générale
Que va-t-on voir dans cette partie de cours ?
Représentation des nombres
Arithmétique flottante : définitions et représentation
Norme IEEE 754, arrondi correct et propriétés de l’arithmétique flottante
Arithmétiques arbitraire et multi-précision (GMP, MPFR, ...)
Arithmétique d’intervalles (MPFI, ...)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 13/37
Représentation des nombres entiers et réels
Plan du cours
1. Introduction générale
2. Représentation des nombres entiers et réels
3. Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 14/37
Représentation des nombres entiers et réels
Représentation en numération simple à position
On appelle base un entier β supérieur ou égal à 2
I dans notre cas, on utilisera principalement la base β = 2
Un chiffre sera un entier (symbole) compris entre 0 et β−1
I si β = 2 chiffre = bit ∈ {0,1}
Un nombre X de n chiffres = une séquence (xn−1xn−2 · · ·x1x0)β, telle que
X =n−1
∑i=0
xi ·βi
I numération simple à positionI βn valeurs représentables sur n chiffresI si β = 2 ⇒ X = un nombre de n bits
Exemple avec β = 2 et n = 8 X = 170 = 27 +25 +23 +21 = (10101010)2
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 15/37
Représentation des nombres entiers et réels
Représentation en complément à la base
En base β, sur n chiffres→ représentation de βn nombres
I essayons de représenter les nombres entre −βn/2 et βn/2−1
Comment représenter les valeurs de 0 à βn ?
I de 0 à βn/2−1 : utilisation de la notation simple à positionI de −βn/2 à -1 : translation de βn−1 positions
Remarque : si β = 2, alors la chaîne de bits (xn−1xn−2 · · ·x1x0) représente
−xn−1 ·2n−1 +n−2
∑i=0
xi ·2i
I bit de poids fort⇒ bit de poids négatifI le signe d’un nombre est déterminé par son bit de poids fort
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 16/37
Représentation des nombres entiers et réels
Représentation en complément à la base
En base β, sur n chiffres→ représentation de βn nombres
I essayons de représenter les nombres entre −βn/2 et βn/2−1
Comment représenter les valeurs de 0 à βn ?
I de 0 à βn/2−1 : utilisation de la notation simple à positionI de −βn/2 à -1 : translation de βn−1 positions
Remarque : si β = 2, alors la chaîne de bits (xn−1xn−2 · · ·x1x0) représente
−xn−1 ·2n−1 +n−2
∑i=0
xi ·2i
I bit de poids fort⇒ bit de poids négatifI le signe d’un nombre est déterminé par son bit de poids fort
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 16/37
Représentation des nombres entiers et réels
Représentation en complément à la base
En base β, sur n chiffres→ représentation de βn nombres
I essayons de représenter les nombres entre −βn/2 et βn/2−1
Comment représenter les valeurs de 0 à βn ?
I de 0 à βn/2−1 : utilisation de la notation simple à positionI de −βn/2 à -1 : translation de βn−1 positions
Remarque : si β = 2, alors la chaîne de bits (xn−1xn−2 · · ·x1x0) représente
−xn−1 ·2n−1 +n−2
∑i=0
xi ·2i
I bit de poids fort⇒ bit de poids négatifI le signe d’un nombre est déterminé par son bit de poids fort
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 16/37
Représentation des nombres entiers et réels
Représentation en virgule fixe
Principe : représentation de nombres réels par des nombres entiers
I utilisation d’un facteur d’échelle impliciteI représentation du nombre entier dans un des systèmes précédents
Exemple : soient X un nombre entier en base β sur n chiffres, et x un nombre réelreprésenté par X
X = (xn−1xn−2 · · ·x1x0)β
et x = X ·β−F
= (xn−1xn−2 · · ·xn−I︸ ︷︷ ︸I chiffres
,xn−I−1 · · ·x1x0︸ ︷︷ ︸F chiffres
)β,
avec n = I + F.
X1X2X3X4X5X6 X0X = X7
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 17/37
Représentation des nombres entiers et réels
Représentation en virgule fixe
Principe : représentation de nombres réels par des nombres entiers
I utilisation d’un facteur d’échelle impliciteI représentation du nombre entier dans un des systèmes précédents
Exemple : soient X un nombre entier en base β sur n chiffres, et x un nombre réelreprésenté par X
X = (xn−1xn−2 · · ·x1x0)βet x = X ·β−F
= (xn−1xn−2 · · ·xn−I︸ ︷︷ ︸I chiffres
,xn−I−1 · · ·x1x0︸ ︷︷ ︸F chiffres
)β,
avec n = I + F.
F chiffresI chiffres
X1X2X3X4X5X6 X0X = X7
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 17/37
Représentation des nombres entiers et réels
Exemple de programme virgule fixe
intmain(void){
// Declaration de 2 nombres virgules fixes encodes sous forme d’entiersint A = 17; // Q30.2 : A = 000000000000000000000000000100.01int B = 13; // Q29.3 : B = 00000000000000000000000000001.101
// Calcul de la somme de ces deux nombresA = A << 1; // Q29.3 : A = 00000000000000000000000000100.010int C = A + B; // Q29.3 : C = 00000000000000000000000000101.111
}
La valeur du résultat encodé par C, et les opérations intermédiaires (décalage, ...)dépendent de la dynamique (du format) des entrées A et B.
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 18/37
Représentation des nombres entiers et réels
Remarques sur la virgule fixe
⊕ La virgule fixe est encore utilisée pour des raisons de rapidité
I opérations en virgule fixe = opérations entière
Le facteur de mise à l’échelle est implicite
I connaissance de l’ordre de grandeur des données de la part des développeursI difficulté de développement
Les nombres représentés ne sont pas d’ordres de grandeurs très différents
I la dynamique des valeurs représentée est plus faible qu’en virgule flottante
Les calculs entre nombres en virgule fixe de magnitudes d’ordre de grandeurdifférents est beaucoup plus compliqué
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 19/37
Représentation des nombres entiers et réels
Remarques sur la virgule fixe
⊕ La virgule fixe est encore utilisée pour des raisons de rapidité
I opérations en virgule fixe = opérations entière
Le facteur de mise à l’échelle est implicite
I connaissance de l’ordre de grandeur des données de la part des développeursI difficulté de développement
Les nombres représentés ne sont pas d’ordres de grandeurs très différents
I la dynamique des valeurs représentée est plus faible qu’en virgule flottante
Les calculs entre nombres en virgule fixe de magnitudes d’ordre de grandeurdifférents est beaucoup plus compliqué
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 19/37
Représentation des nombres entiers et réels
Règles d’arithmétique virgule fixe addition et multiplication
Addition
I format virgule fixe identiqueI alignement des virgulesI extension du bit de signe Sr r0r1r4 r3 r2 r−4r−1 r−2 r−3 r−5
b1 b0 b−2b−1 0b−3 0Sb Sb Sb
a2a3Sa a1 a0 a−1 a−2 a−3 a−4 a−5
Ia
Ib Fb
Fa
Ir = max(Ia,Ib)+1 Fr = max(Fa,Fb)
Multiplication
I doublement de la taille dereprésentation du signe
Sr r0r1r4 r3 r2 r−1 r−2 r−3 r−5r−4
b−2b−1b0b1Sb
Sr
a0a1a2Sa a−1 a−2 a−3
FaIa
Ib Fb
Fr = Fa+FbIr = Ia+Ib
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 20/37
Représentation des nombres entiers et réels
Règles d’arithmétique virgule fixe addition et multiplication
Addition
I format virgule fixe identiqueI alignement des virgulesI extension du bit de signe Sr r0r1r4 r3 r2 r−4r−1 r−2 r−3 r−5
b1 b0 b−2b−1 0b−3 0Sb Sb Sb
a2a3Sa a1 a0 a−1 a−2 a−3 a−4 a−5
Ia
Ib Fb
Fa
Ir = max(Ia,Ib)+1 Fr = max(Fa,Fb)
Multiplication
I doublement de la taille dereprésentation du signe
Sr r0r1r4 r3 r2 r−1 r−2 r−3 r−5r−4
b−2b−1b0b1Sb
Sr
a0a1a2Sa a−1 a−2 a−3
FaIa
Ib Fb
Fr = Fa+FbIr = Ia+Ib
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 20/37
Représentation des nombres entiers et réels
Représentation d’un nombre virgule flottante
En virgule flottante, en base β, un nombre réel x est représenté par :un signe s ∈ {0,1} 0 : positif / 1 : négatif
une mantisse m, écrite en virgule fixe en base β sur p chiffres (β≥ 2)
un exposant e ∈ {emin, · · · ,emax}
de telle sorte que
x = (−1)s ·m ·βe,
avec pour k ∈ {0, · · · ,p−1}
m = m0 · · ·mi .mi+1 · · ·mp−1 et mk ∈ {0, · · · ,β−1}.
On dit que le nombre flottant x est de précision p (avec p ≥ 1)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 21/37
Représentation des nombres entiers et réels
Remarques sur l’arithmétique virgule flottante
Remarque 1 : βe joue ici le rôle du facteur de mise à l’échelle
I il est explicite en virgule flottante
Remarque 2 : Cette représentation
x = (−1)s ·m ·βe
n’est pas unique. Par exemple, le nombre 2.617 en base β = 10 se représente enprécision p = 4 de différentes manières :
.2617 ·101 ou 2617 ·10−3.
I notion d’exposant convention choisie pour représenter la mantisse
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 22/37
Représentation des nombres entiers et réels
Dynamique des nombres : floating-point vs. fixed-point
0
100
200
300
400
500
600
700
800
10 bits
16 bits
24 bits
32 bits
64 bits
log 1
0
( max
(x)/
min
(x))
Different standard formats (IEEE 754-2008 and OpenGL).
Fixed-pointFloating-point
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 23/37
Représentation des nombres entiers et réels
Dynamique des nombres : floating-point vs. fixed-point
0
20
40
60
80
100
120
10 bits
16 bits
24 bits
32 bits
log 1
0
( max
(x)/
min
(x))
Different standard formats (IEEE 754-2008 and OpenGL).
Fixed-point DSP
Fixed-pointFloating-point
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 23/37
Représentation des nombres entiers et réels
La virgule flottante avant la norme IEEE 754
Différentes machines avec différents systèmes flottants :
Système et arithmétique Base β Précision p Exposants (emin, emax)
Cray 1 (single) 2 48 (−8192, 8191)Cray 1 (double) 2 96 (−8192, 8191)DEC VAX G format (double) 2 53 (−1023, 1023)DEC VAX D format (double) 2 56 (−127, 127)HP 28 et 48G 10 12 (−499, 499)IBM 3090 (single) 16 6 (−64, 63)IBM 3090 (double) 16 14 (−64, 63)IBM 3090 (extended) 16 28 (−64, 63)
Comment écrire un programme qui soit portable ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 24/37
Représentation des nombres entiers et réels
La virgule flottante avant la norme IEEE 754
Sur certaines machines Cray, on avait :
pour certaines entrées x , 1× x overflow (dépassement de capacité)
x + y 6= y + x
0.5× x 6= x/2.0
Sur IBM 370 (1970), en Fortran, on avait :
√−4 = 2
I = 14./7.0 I = 1
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 25/37
Norme IEEE 754
Plan du cours
1. Introduction générale
2. Représentation des nombres entiers et réels
3. Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 26/37
Norme IEEE 754
Histoire de la norme IEEE 754
Jusque dans les années 80 : chaque constructeur avait sa propre implantation del’arithmétique flottante
I quelle base β était utilisée ? quelle plage d’exposant [emin,emax]?I un programme différents résultats sur différentes architectures
Besoin de standardiser et d’homogénéiser l’implantation l’arithmétique virguleflottante en base 2
I fixer précisement le format des données et leur encodage en machineI définir le comportement et la précision des opérations de base (+, −, ×, /, √ )I définir les valeurs spéciales, les modes d’arrondis, et la gestion des exceptions
1985 : publication du standard IEEE 754-1985, initié par Prof. William Kahan
I 2008 : révision de la norme IEEE 754-2008
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 27/37
Norme IEEE 754
Histoire de la norme IEEE 754
Jusque dans les années 80 : chaque constructeur avait sa propre implantation del’arithmétique flottante
I quelle base β était utilisée ? quelle plage d’exposant [emin,emax]?I un programme différents résultats sur différentes architectures
Besoin de standardiser et d’homogénéiser l’implantation l’arithmétique virguleflottante en base 2
I fixer précisement le format des données et leur encodage en machineI définir le comportement et la précision des opérations de base (+, −, ×, /, √ )I définir les valeurs spéciales, les modes d’arrondis, et la gestion des exceptions
1985 : publication du standard IEEE 754-1985, initié par Prof. William Kahan
I 2008 : révision de la norme IEEE 754-2008
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 27/37
Norme IEEE 754
Histoire de la norme IEEE 754
Jusque dans les années 80 : chaque constructeur avait sa propre implantation del’arithmétique flottante
I quelle base β était utilisée ? quelle plage d’exposant [emin,emax]?I un programme différents résultats sur différentes architectures
Besoin de standardiser et d’homogénéiser l’implantation l’arithmétique virguleflottante en base 2
I fixer précisement le format des données et leur encodage en machineI définir le comportement et la précision des opérations de base (+, −, ×, /, √ )I définir les valeurs spéciales, les modes d’arrondis, et la gestion des exceptions
1985 : publication du standard IEEE 754-1985, initié par Prof. William Kahan
I 2008 : révision de la norme IEEE 754-2008
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 27/37
Norme IEEE 754
Quelques nouveautés de la norme IEEE 754-2008... en plus de ce qui est définit dans la norme IEEE 754-1985
Standardisation de la base β = 10, en plus de la base β = 2
I dans le reste du cours, on ne s’intéressera qu’à la base β = 2
Standardisation de l’opération fma (fused multiply-add) :
fma(a,b,c) = ◦(a×b+ c).
I une multiplication et une addition, avec un seul arrondi final
Standardisation de l’arithmétique quadruple précision
Définition du comportement de certaines fonctions, autres que les opérations debase (+,−,×,/,√ ),
I fonctions élémentaires : cos(x), sin(x), log(x), exp(x), ...
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 28/37
Norme IEEE 754
Formats de représentation standards des données
Le standard IEEE 754-2008 définit 3 formats de base pour les nombres flottants :
Simple précision Double précision Quadruple précision
Précision p 24 53 113
Taille de l’exposant w 8 11 15
Taille de la représentation k = p+w 32 64 128
emin, emax -126, 127 -1022, 1023 -16382, 16383
Type C float double -
avec
I taille de la mantisse precision : p bitsI taille d’exposant : w bitsI emax = 2w−1−1 et emin = 1−emax
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 29/37
Norme IEEE 754
Repésentation normalisée des nombres flottants
Même en fixant la position de la virgule dans la mantisse d’un nombre flottant, unmême nombre peut avoir plusieurs représentations :
2.170×100 et 0.217×10−1.
Pour pallier ce problème, et éviter de perdre de la précision sur la mantisse, on faiten sorte qu’elle soit normalisée, c’est-a-dire, que le bit m0 6= 0
I la représentation est alors unique (pour les valeurs non nulles)I c’est la représentation qui minimise l’exposantI en base β = 2 : m0 = 1 on a donc pas besoin de stocker le bit m0 en mémoire
(= bit implicite)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 30/37
Norme IEEE 754
Encodage des nombres flottants normalisés en mémoire
Soit x un nombre flottant normalisé. L’encodage de x est le suivant :1 bit pour le signe (0 ou 1),
w bits pour l’exposant,
p−1 bits pour la fraction de la mantisse.
avec k = w +p.
I on n’a pas besoin de stocker le bit m0 car m0 = 1 (= bit implicite)
L’exposant e ∈ [emin,emax] et peut donc être négatif. Mais on peut avoir besoin decomparer deux exposants
I lors d’une addition (par exemple) pour aligner les mantissesI comparaison délicate en notation signe-valeur absolue ou complément à 2
Encodage de l’exposant en utilsant une représentation biaisée : e+emax
I faciliter les comparaisons d’exposantsI éviter de faire intervenir les signes des exposants
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 31/37
Norme IEEE 754
Encodage des nombres flottants normalisés en mémoire
Soit x un nombre flottant normalisé. L’encodage de x est le suivant :1 bit pour le signe (0 ou 1),
w bits pour l’exposant,
p−1 bits pour la fraction de la mantisse.
avec k = w +p.
I on n’a pas besoin de stocker le bit m0 car m0 = 1 (= bit implicite)
L’exposant e ∈ [emin,emax] et peut donc être négatif. Mais on peut avoir besoin decomparer deux exposants
I lors d’une addition (par exemple) pour aligner les mantissesI comparaison délicate en notation signe-valeur absolue ou complément à 2
Encodage de l’exposant en utilsant une représentation biaisée : e+emax
I faciliter les comparaisons d’exposantsI éviter de faire intervenir les signes des exposants
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 31/37
Norme IEEE 754
Intérêt des nombres dénormalisés
La normalisation de la mantisse (m0 6= 0) implique qu’il n’y a pas de nombrereprésentable entre 0 et 2emin .
Cette situation peut être problématique, comme par exemple dans le cas suivant :
if x != y then // avec x = 2^emin et y = (1 + 2^(1-p))*2^eminz = 1 / (y - x) // -> x != y mais y - x = 2^(emin -p+1) arrondi vers 0
I intérêt des nombres dénormalisés
Un nombre dénormalisé est de la forme suivante :
x = (−1)s ·m ·βe, avec m0 = 0 et e = emin.
I encodage de la fraction uniquement, avec un exposant particulier 0
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 32/37
Norme IEEE 754
Intérêt des nombres dénormalisés
La normalisation de la mantisse (m0 6= 0) implique qu’il n’y a pas de nombrereprésentable entre 0 et 2emin .
Cette situation peut être problématique, comme par exemple dans le cas suivant :
if x != y then // avec x = 2^emin et y = (1 + 2^(1-p))*2^eminz = 1 / (y - x) // -> x != y mais y - x = 2^(emin -p+1) arrondi vers 0
I intérêt des nombres dénormalisés
Un nombre dénormalisé est de la forme suivante :
x = (−1)s ·m ·βe, avec m0 = 0 et e = emin.
I encodage de la fraction uniquement, avec un exposant particulier 0
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 32/37
Norme IEEE 754
Nombres spéciaux {±0,±∞,NaN}
Le standard IEEE 754-2008 également trois nombres spéciaux (ou valeursspéciales), et deux zéros :
I deux infinis : +∞, −∞
I Not-a-Numbers : sNaN (signaling-NaN) et qNaN (quiet-NaN) résultat d’unopération invalide (0/0, par exemple), se propagent dans les calculs
I deux zéros signés : +0 et −0 cohérent avec les deux infinis
1+0
=+∞ et1−0
=−∞.
Les quiet-NaN devraient être utilisés pour propager de l’information en dehorsd’une partie de programme conserver un maximum d’information sur leproblème survenu
I faciliter un diagnostic a posteriori
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 33/37
Norme IEEE 754
Encodages des nombres spéciaux en mémoire... dans le format simple précision
Encodage des valeurs +0 et −0
+0 0 00000000 00000000000000000000
−0 1 00000000 00000000000000000000
I deux représentations pour le zéro cohérent avec les deux infinis
Encodage des valeurs +∞, −∞ et NaN (Not a Number)
+∞ 0 11111111 00000000000000000000
−∞ 1 11111111 00000000000000000000
sNaN 1 11111111 00000000000000000001
qNaN 1 11111111 10000000000000000001
I plusieurs représentations pour les deux NaNI si m1 = 1 quiet NaNI si m1 = 0 signaling NaN
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 34/37
Norme IEEE 754
Encodages des nombres spéciaux en mémoire... dans le format simple précision
Encodage des valeurs +0 et −0
+0 0 00000000 00000000000000000000
−0 1 00000000 00000000000000000000
I deux représentations pour le zéro cohérent avec les deux infinis
Encodage des valeurs +∞, −∞ et NaN (Not a Number)
+∞ 0 11111111 00000000000000000000
−∞ 1 11111111 00000000000000000000
sNaN 1 11111111 00000000000000000001
qNaN 1 11111111 10000000000000000001
I plusieurs représentations pour les deux NaNI si m1 = 1 quiet NaNI si m1 = 0 signaling NaN
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 34/37
Norme IEEE 754
Drapeaux en cas d’exception
Aucune exception ne doit entraver le bon déroulement des calculs. Un mécanismede drapeaux informe le système sur ce qui s’est produit.
Les 5 drapeaux qui doivent être levés en cas d’exceptions sont :
I opération invalide : une entrée de l’opération est invalide :√−2, ...
le résultat par défaut est un NaNI division par zéro : un résultat exact infini est défini pour cette opération sur des
entrées finies : 1/0, log(+0), ... le résultat est un infini (±∞)
I dépassement de capacité vers l’infini (overflow) : le résultat exact est strictementsupérieur à (2−21−p) ·2emax (le plus grand nombre flottant normalisé) le résultat est soit ±∞, soit ±(2−21−p) ·2emax (suivant le mode d’arrondi)
I dépassement de capacité vers 0 (underflow) : le résultat exact est strictementinférieur à 2emin (le plus petit nombre flottant normalisé) le résultat est soit ±0, soit ± un nombre dénormalisé, soit ±2emin (suivant le mode
d’arrondi)
I résultat inexact : le résultat d’une opération est inexact, c’est-à-dire, ne peut êtrereprésenté exactement
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 35/37
Norme IEEE 754
Notions d’arrondi et d’arrondi correct
Le résultat d’une opération flottante entre deux nombres flottants n’est, engénéral, pas exactement représentable par un nombre flottant.
I le résultat doit être arrondi
La norme IEEE 754-2008 propose 4 modes d’arrondi
I au plus près pair (RN),I vers +∞ (RU), vers −∞ (RD),I et vers 0 (RZ)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/37
Norme IEEE 754
Notions d’arrondi et d’arrondi correct
Le résultat d’une opération flottante entre deux nombres flottants n’est, engénéral, pas exactement représentable par un nombre flottant.
I le résultat doit être arrondi
La norme IEEE 754-2008 propose 4 modes d’arrondi
I au plus près pair (RN),I vers +∞ (RU), vers −∞ (RD),I et vers 0 (RZ) RU(x)
RD(x)
RZ(x) si x > 0
resultat exact x
RN(x)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/37
Norme IEEE 754
Notions d’arrondi et d’arrondi correct
Le résultat d’une opération flottante entre deux nombres flottants n’est, engénéral, pas exactement représentable par un nombre flottant.
I le résultat doit être arrondi
La norme IEEE 754-2008 propose 4 modes d’arrondi
I au plus près pair (RN),I vers +∞ (RU), vers −∞ (RD),I et vers 0 (RZ) RU(x)
RD(x)
RZ(x) si x > 0
resultat exact x
RN(x)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/37
Norme IEEE 754
Notions d’arrondi et d’arrondi correct
Le résultat d’une opération flottante entre deux nombres flottants n’est, engénéral, pas exactement représentable par un nombre flottant.
I le résultat doit être arrondi
La norme IEEE 754-2008 propose 4 modes d’arrondi
I au plus près pair (RN),I vers +∞ (RU), vers −∞ (RD),I et vers 0 (RZ) RU(x)
RD(x)
RZ(x) si x > 0
resultat exact x
RN(x) si mantisse paire
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/37
Norme IEEE 754
Notions d’arrondi et d’arrondi correct
Le résultat d’une opération flottante entre deux nombres flottants n’est, engénéral, pas exactement représentable par un nombre flottant.
I le résultat doit être arrondi
La norme IEEE 754-2008
I requiert l’arrondi correct pour les quatres opérations de base (+,−,×,/), la racinecarrée (√ ) et le fma,
I et le recommande uniquement pour les autres opérations (trigonométriques,logarithmes, exponentielles, ...).
Arrondi correct : le résultat d’une opération flottante entre deux nombres flottantsest dans un premier temps calculé avec une précision infinie et un intervalled’exposant [emin,emax] non borné, puis arrondi dans le format considéré suivant lemode d’arrondi fixé
I le résultat est dit correctement arrondi
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/37
Questions ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 37/37