Académique Documents
Professionnel Documents
Culture Documents
Guillaume Revy
guillaume.revy@univ-perp.fr
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 1/36
Organisation du cours “Qualité Numérique du Logiciel”
Organisation :
I 18h de cours
I 18h de TD
2 intervenants :
I G. Revy 9 séances de 2h de CM/TD
I Ph. Langlois 9 séances de 2h de CM/TD
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 2/36
Plan du cours
1. Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 3/36
Introduction générale
Plan du cours
1. Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 4/36
Introduction générale
Introduction
L’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, ...)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 5/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 6/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 6/36
Introduction générale
Compteur dans la batterie du missile : ajout de 1/10 tous les dixièmes de seconde
I 1/10 non représentable exactement en machine
I 1/10 ≈ (0.000110011001100110011001100110011001...)2
I erreur (24 bits) ≈ 9.5 × 10−8 par ajout de 1/10
I au bout de 100h : erreur ≈ 0.34 secondes
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 7/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 8/36
Introduction générale
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 820 449 136 241 002 <-- valeur correcte
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 739 068 902 037 589 <-- Pentium P5
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/36
Introduction générale
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 820 449 136 241 002 <-- valeur correcte
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 739 068 902 037 589 <-- Pentium P5
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/36
Introduction générale
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 820 449 136 241 002 <-- valeur correcte
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 739 068 902 037 589 <-- Pentium P5
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/36
Introduction générale
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 820 449 136 241 002 <-- valeur correcte
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 739 068 902 037 589 <-- Pentium P5
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/36
Introduction générale
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 820 449 136 241 002 <-- valeur correcte
4 195 835 ,0 / 3 145 727 ,0 = 1 ,333 739 068 902 037 589 <-- Pentium P5
Bug dans Maple 7.0 : Erreur dans la fonction factorielle de Maple 7.0
I 1001!/1000! 1 (au lieu de 1001)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 9/36
Introduction générale
u0
=2 printf ("u( 1) = % 1.19 e\n" ,u1 );
int n; for (n = 1 ; n <= 19 ; n ++) {
u1 = −4 float tmp = 111. f - 1130. f/ u1 + 3000. f * 1/( u1 * u0 );
printf ("u (%2 d) = % 1.19 e\n" ,n+1 , tmp );
= 111 − 1130 + (u3000
u u0 = u1 ; u1 = tmp ;
n+1 un n ·u n-1 ) }
return 0;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/36
Introduction générale
u0
=2 printf ("u( 1) = % 1.19 e\n" ,u1 );
int n; for (n = 1 ; n <= 19 ; n ++) {
u1 = −4 float tmp = 111. f - 1130. f/ u1 + 3000. f * 1/( u1 * u0 );
printf ("u (%2 d) = % 1.19 e\n" ,n+1 , tmp );
= 111 − 1130 + (u3000
u u0 = u1 ; u1 = tmp ;
n+1 un n ·u n-1 ) }
return 0;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/36
Introduction générale
u0
=2 printf ("u( 1) = % 1.19 e\n" ,u1 );
int n; for (n = 1 ; n <= 19 ; n ++) {
u1 = −4 float tmp = 111. f - 1130. f/ u1 + 3000. f * 1/( u1 * u0 );
printf ("u (%2 d) = % 1.19 e\n" ,n+1 , tmp );
= 111 − 1130 + (u3000
u u0 = u1 ; u1 = tmp ;
n+1 un n ·u n-1 ) }
return 0;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/36
Introduction générale
u0
=2 printf ("u( 1) = % 1.19 e\n" ,u1 );
int n; for (n = 1 ; n <= 19 ; n ++) {
u1 = −4 float tmp = 111. f - 1130. f/ u1 + 3000. f * 1/( u1 * u0 );
printf ("u (%2 d) = % 1.19 e\n" ,n+1 , tmp );
= 111 − 1130 + (u3000
u u0 = u1 ; u1 = tmp ;
n+1 un n ·u n-1 ) }
return 0;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 10/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 11/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 12/36
Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 12/36
Introduction générale
Arithmétique d’intervalles
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 13/36
Représentation des nombres entiers et réels
Plan du cours
1. Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 14/36
Représentation des nombres entiers et réels
n−1
X= ∑ xi · βi
i =0
I numération simple à position
I βn valeurs représentables sur n chiffres
I si β = 2 ⇒ X = un nombre de n bits
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 15/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 16/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 16/36
Représentation des nombres entiers et réels
n−2
−xn−1 · 2n−1 + ∑ xi · 2i
i =0
I bit de poids fort ⇒ bit de poids négatif
I 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/36
Représentation des nombres entiers et réels
X = (xn−1 xn−2 · · · x1 x0 )β
X= X7 X6 X5 X4 X3 X2 X1 X0
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 17/36
Représentation des nombres entiers et réels
X = (xn−1 xn−2 · · · x1 x0 )β
et x = X · β−F
= (xn−1 xn−2 · · · xn−I , xn−I −1 · · · x1 x0 )β ,
| {z } | {z }
I chiffres F chiffres
avec n = I + F.
X= X7 X6 X5 X4 X3 X2 X1 X0
I chiffres F chiffres
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 17/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 18/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 18/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 19/36
Représentation des nombres entiers et réels
Ia Fa
Ir = Ia +Ib Fr = Fa +Fb
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 19/36
Représentation des nombres entiers et réels
x = (−1)s · m · βe ,
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 20/36
Représentation des nombres entiers et réels
x = (−1)s · m · βe
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 21/36
Représentation des nombres entiers et réels
600
log10 max(x)/ min(x)
500
400
300
200
100
0
10
16
24
32
64
bi
bi
bi
bi
bi
ts
ts
ts
ts
ts
Different standard formats (IEEE 754-2008 and OpenGL).
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 22/36
Représentation des nombres entiers et réels
80
60
40
Fixed-point DSP
20
0
10
16
24
32
bi
bi
bi
bi
ts
ts
ts
ts
Different standard formats (IEEE 754-2008 and OpenGL).
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 22/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 23/36
Représentation des nombres entiers et réels
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 24/36
Norme IEEE 754
Plan du cours
1. Introduction générale
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 25/36
Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 26/36
Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 26/36
Norme IEEE 754
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 26/36
Norme IEEE 754
fma(a, b, c ) = ◦(a × b + c ).
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 27/36
Norme IEEE 754
Le standard IEEE 754-2008 définit 3 formats de base pour les nombres flottants :
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 bits
I taille d’exposant : w bits
I 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 28/36
Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 29/36
Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 30/36
Norme IEEE 754
L’exposant e ∈ [emin , emax ] et peut donc être négatif. Mais on peut avoir besoin de
comparer deux exposants
I lors d’une addition (par exemple) pour aligner les mantisses
I comparaison délicate en notation signe-valeur absolue ou complément à 2
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 30/36
Norme IEEE 754
Cette situation peut être problématique, comme par exemple dans le cas suivant :
if x != y then
z = 1 / (x - y)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 31/36
Norme IEEE 754
Cette situation peut être problématique, comme par exemple dans le cas suivant :
if x != y then
z = 1 / (x - y)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 31/36
Norme IEEE 754
1 1
= +∞ et = −∞.
+0 −0
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 32/36
Norme IEEE 754
+0 0 00000000 00000000000000000000
−0 1 00000000 00000000000000000000
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 33/36
Norme IEEE 754
+0 0 00000000 00000000000000000000
−0 1 00000000 00000000000000000000
+∞ 0 11111111 00000000000000000000
−∞ 1 11111111 00000000000000000000
sNaN 1 11111111 00000000000000000001
qNaN 1 11111111 10000000000000000001
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 33/36
Norme IEEE 754
Remarque : les drapeaux restent levés jusqu’à remise à zéro (par l’utilisateur)
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 34/36
Norme IEEE 754
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 35/36
Norme IEEE 754
RN(x)
résultat exact x
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 35/36
Norme IEEE 754
RN(x)
résultat exact x
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 35/36
Norme IEEE 754
résultat exact x
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 35/36
Norme IEEE 754
La norme IEEE 754-2008 requiert l’arrondi correct pour les quatres opérations de
√
base (+,−,×,/), la racine carrée ( ) et le fma, 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 flottants
est dans un premier temps calculé avec une précision infinie et un intervalle
d’exposant [emin , emax ] non borné, puis arrondi dans le format considéré suivant le
mode 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 35/36
Questions ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Représentation des nombres, arithmétique flottante, norme IEEE 754 36/36