Nothing Special   »   [go: up one dir, main page]

Chapitre1 AnalNum

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Chapter 1

Arithmétique des ordinateurs et analyse


d’erreurs

Sommaire
1.1. L’arithmétique flottante . . . . . . . . . . . . . . . . . . . . 5

1.1.1. Le système des nombres à virgule flottante . . . . . . . . . . . 5

1.1.2. Représentation effective des réels et sa formalisation . . . . . . . 7

1.1.3. Unité d’erreur d’arrondi, estimation d’erreurs . . . . . . . . . . 7

1.1.4. Modèle de l’arithmétique flottante . . . . . . . . . . . . . . 8

1.2. L’analyse d’erreurs . . . . . . . . . . . . . . . . . . . . . . 8

1.2.1. Non-associativité . . . . . . . . . . . . . . . . . . . . . 8

1.2.2. Erreurs d’arrondi sur une somme . . . . . . . . . . . . . . . 8

1.2.3. Erreurs d’arrondi sur un produit . . . . . . . . . . . . . . . 8

1.2.4. Phénomènes de compensation . . . . . . . . . . . . . . . . 9

1.2.5. Phénomènes d’instabilité numérique . . . . . . . . . . . . . 9

1.2.6. Erreur amont et erreur aval . . . . . . . . . . . . . . . . . 10

1.2.7. Outils théoriques de l’analyse d’erreurs . . . . . . . . . . . . 11

4
Dans tout ce cours, nous manipulerons des nombres réels. L’objet de ce
premier chapitre est de décrire comment ces nombres réels sont représentés dans un
ordinateur.

1.1 L’arithmétique flottante


1.1.1 Le système des nombres à virgule flottante
Théorème 1.1 Soit β un entier strictement supérieur à 1. Tout nombre réel x non nul peut se
représenter sous la forme

X dk
x = sgn(x)β e ,
k≥1
βk

où sgn(x) ∈ {+, −} est le signe de x, les dk sont des entiers tels que 0 < d1 ≤ β − 1 et
0 ≤ dk ≤ β − 1 pour k ≥ 2, et e ∈ Z. De plus, cette écriture est unique (sauf pour les décimaux :
2, 5 = 2, 499999 . . .).
D’ordinaire, nous utilisons le système décimal, i.e., β = 10 et les chiffres
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 pour les dk . Nous avons par exemple :
• 0,0038 = 0,38.10−2 = + 10−2 ( 10
3
+ 8
102
).
1 1
• = 0,142857... = + 100 ( 10
7
+ 1042 + 1023 + 1084 + ...). Notons que le développement
décimal d’un nombre rationnel est périodique (ici, 71 = 0, 142857142857142857...).
√ 1
• - 2 = −1, 4142... = −101 ( 10 + 1042 + 1013 + 1044 + ...).
3 1 4 1
• π = 3, 14159... = +101 ( 10 + 102
+ 103
+ 104
+ ...).
Historiquement, le choix β = 10 est lié à une particularité anatomique de la race
humaine (nous avons 10 doigts). Les ordinateurs utilisent quant à eux β = 2 (numération
binaire), β = 8 (numération octale), ou encore β = 16 (numération hexadécimale).
Remarquons que l’on perd l’unicité si on autorise d1 = 0 : en effet, on a par exemple
:

 
−2 3 8 −2
0.0038 = 0.38.10 = +10 +
10 102
 
−3 −1 0 3 8
= 0.038.10 = +10 + +
10 102 103

On définit l’ensemble F ⊂ R par :

5
 
e d1 d2 dt
F = y ∈ R|y = ±β ( + 2 + ... + t ), emin ≤ e ≤ emax ,
β β β
ou encore
F = y ∈ R|y = ±mβ e−t , emin ≤ e ≤ emax .


Ceci correspond aux deux écritures 0.038 = +10−2 ( 103


+ 1082 ) = +38.10−4 avec e = -2,
t = 2, e − t = −4. Le nombre m s’appelle lamantisse et on utilise
 la notation m = Notons
d1 d2 dt
/ F . Pour y 6= 0, on mβ e−t = β e
que 0 ∈ β
+ β2
+ ... + βt
≥ β e β1 car d1 ≥ 1. D’où
m ≥ β t−1 .
D’autre part, m == d1 β t−1 + ... + dt−k β k + ... + dt−1 β + dt < β t . On a donc montré
que
β t−1 ≤ m < β t .

F est un système de nombres à virgule flottante (floating point number system) noté
F (β, t, emin , emax ). Il dépend de quatre paramètres :
1. la base β (chiffres utilisés 0, 1, ..., β − 1),
2. la précision t (nombre de chiffres utilisés pour représenter la mantisse),
3. emin et emax qui définissent le domaine des exposants.
Par exemple, pour F (2, 3, −1, 3), on obtient les nombres représentés en rouge sur la
figure ci-dessous :
On constate que l’écart entre deux nombres consécutifs est multiplié par 2 à chaque
puissance de 2. Dans le standard IEEE 754 utilisé par Matlab, on a β = 2 et :
• en simple précision : t = 24, emin = −125, emax = 128,
• en double précision : t = 53, emin = −1021, emax = 1024,
Définition 1.2 On appelle epsilon machine et on note M la distance de 1 au nombre flottant
suivant.
Par exemple, pour F (2, 3, −1, 3), on a M = 0, 25. Dans Matlab, c’est eps.
Proposition 1.3 Pour F (β, t, emin , emax ), on a M = β 1−t .
β
Démonstration. On a 1 = β β1 = β 1−t 10...0 . Le nombre suivant dans le système de
β
nombres à virgule flottante F (β, t, emin , emax ) est alors β 1−t 10...1 = β 1−t (β t−1 + 1) = 1 +
β 1−t .
Lemme 1.4 Dans le système de nombres à virgule flottante F (β, t, emin , emax ), l’écart |y − x|
entre un nombre flottant x (non nul) et un nombre flottant y (non nul) adjacent vérifie β −1 M |x| ≤
|y − x| ≤ M |x|

6
Démonstartion. On a x = mβe − t, donc |y − x| = 1β e−t . Or β t−1 ≤ m < β t donc
mβ −t < 1 et mβ 1−t ≥ 1. Il vient donc mβ −t β e−t < 1β e−t ≤ mβ 1−t β e−t d’où le résultat
puisque M = β 1−t .

1.1.2 Représentation effective des réels et sa formalisation


• Représentation « physique » : par exemple, en simple précision 32 bits (bit = binary
digit), 8 bits sont réservés à l’exposant et 24 bits (dont 1 pour le signe) à la mantisse.
En double précision 64 bits, 11 bits sont réservés à l’exposant et 53 bits (dont 1 pour
le signe) à la mantisse.
• Arrondi :
1. par troncature : par exemple avec 3 chiffres, 0, 8573 . . . devient 0, 857.
2. au plus près : 0, 8573 . . . devient 0, 857.
3. au représentant le plus proche dont la dernière décimale est paire (rounding to
even) : 0, 8573 . . . devient 0, 858.
• Formalisation :
Définition 1.5 Soit G = G(β, t) = {y ∈ R|y = ±mβ e−1 } sans conditions sur l’exposant
e.
L’application fl : R → G, x 7→ fl(x) est appelée opération d’arrondi.
Étant donné un domaine F (β, t, emin , emax ), il y a alors dépassement de capacité si :
1. |fl(x) > max {|y||y ∈ F }. On parle d’« overflow ».
2. |fl(x) < min {|y||y ∈ F }. On parle d’« underflow ».
Sinon, x est dans le domaine de F .

1.1.3 Unité d’erreur d’arrondi, estimation d’erreurs


Définition 1.6 Soit x un réel et x̄ une valeur approchée de x. L’erreur absolue e est défini par
e = |x − x̄|. L’erreur relative est xe . Le pourcentage d’erreur est l’erreur relative multipliée par
100.
En pratique, on ne connait en général pas la valeur exacte x (c’est le cas dans la plupart
des mesures physiques) mais on peut souvent avoir une idée de l’erreur maximale e que
l’on a pu commettre : dans ce cas, on majore la quantité xe .
Théorème 1.7 (Estimation de l’erreur d’arrondi). Soit x un réel. Si x est dans le domaine
F (β, t, emin , emax ), alors il existe δ ∈ R avec |δ| < u = 21 β 1−t = 21 M tel que fl(x) = x(1 + δ).
Démonstration. Admis pour ce cours.
L’erreur relative sur l’arrondi est égale à |δ| < u : le nombre u s’appelle unité d’erreur
d’arrondi.

7
Par exemple, dans le standard IEEE 754 utilisé par Matlab, on a u = 2−24 ≈ 5, 96.10−8
en simple précision et u = 2−53 ≈ 1, 11.10−16 en double précision.

1.1.4 Modèle de l’arithmétique flottante


Le modèle suivant de l’arithmétique flottante est celui utilisé par le standard
IEEE.

n o
Modèle Standart : Soit x, y ∈ F (β, t, emin , emax ). Pour op ∈ +, −, ×, ÷, , on définit
1 1−t 1
x op y = fl(xopy) = (xopy)(1+δ) avec |δ| =< u = 2
β =  .
2 M
Nous allons maintenant
nous intéressé aux erreurs faites par op

1.2 L’analyse d’erreurs


1.2.1 Non-associativité
En général, contrairement à op, l’opération op n’est pas associative. Ceci est dû aux
erreurs d’arrondi. Par exemple, supposons que les réels soient calculés avec 3 chiffres
significatifs et arrondis à la décimale la plus proche et cherchons à calculer la somme
x  y  z avec x = 8, 22, y = 0, 00317 et z = 0, 00432
• x  y = 8, 22 donc (x  y)  z = 8, 22,
• x  z = 0, 01 donc x  (y  z) = 8, 23,

1.2.2 Erreurs d’arrondi sur une somme


Supposons que l’on souhaite calculer une somme S = u1 + u2 + ... + un de n réels
positifs dans F (β, t, emin , emax ). On calcule alors les sommes partielles Si par la récurrence
S0 = 0, Si = Si−1 + ui . Si l’on suppose les ui connus exactement, alors les erreurs d’arrondi
∆Si commises sur le calcul des sommes partielles Si vérifient ∆Si ≤ ∆Si−1 + δ(Si−1 + ui ) =
∆Si−1 + δSi où |δ| < u. L’erreur globale sur S = Sn vérifie donc

∆S ≤ δ(S2 + ...Sn ),

ou encore
∆S ≤ δ(un + 2un−1 + 3un−2 + ... + (n − 1)u2 + (n − 1)u1 ).
On voit donc que pour minimiser cette erreur on a tout intérêt à sommer d’abord les
termes les plus petits (Cf exemple de la sous-section précédente).

1.2.3 Erreurs d’arrondi sur un produit


Supposons que l’on souhaite calculer un produit R = u1 u2 ...un de n réels positifs dans
F (β, t, emin , emax ). On calcule alors les produits Pi par la récurrence P0 = 1, Pi = Pi−1 ui .
Si l’on suppose les ui connus exactement, alors les erreurs d’arrondi ∆Pi commises sur le

8
calcul des produits Pi vérifient ∆Pi ≤ ∆Pi−1 ui + δ(Si−1 ui ) = ∆Pi−1 ui + δPi où |δ| < u.
L’erreur globale sur P = Pn vérifie donc

∆P ≤ (k − 1)δPn

On voit donc que contrairement au cas de l’addition, la majoration de l’erreur ne dépend


pas de l’ordre des facteurs.

1.2.4 Phénomènes de compensation


Les phénomènes de compensation sont ceux qui se produisent lorsque l’on tente de
soustraire des nombres très proches. Nous illustrons ces phénomènes sur deux exemples
et donnons des astuces pour les contourner.
√ √
Exemple 1 : On considère l’expression E = x + 1 − x avec x > 0. Sous Matlab,
1 √
en calculant E = √x+1+ x
, alors, en utilisant cette nouvelle formule, on trouvera E =
1, 5811.10 pour x = 10 et E = 5, 000.10−9 pour x = 1016
−5 9

Exemple 2 : On considère l’équation du second degré x2 −1634x+2 = 0. Supposons que


les calculs soient effectués √
avec 10 chiffres significatifs. Les formules habituelles donnent
0 1634 2
∆ = ( 2 ) − 2 = 667487, ∆0 = 816, 9987760, d’où les solutions
1634 √ 0
x1 = + ∆ = 817 + 816, 9987760 = 1633, 998776,
2
1634 √ 0
x1 = − ∆ = 817 − 816, 9987760 = 0, 0012240.
2
On voit donc qu’en procédant ainsi on a une perte de 5 chiffres significatifs sur x2 . Pour
y remédier, on peut utiliser la relation x1 x2 = 2 et calculer
2 2
x2 = = = 0, 001223991125.
x1 1633, 998776

1.2.5 Phénomènes d’instabilité numérique


Les phénomènes d’instabilité numérique sont des phénomènes d’amplification
d’erreur d’arrondi. Ils se produisent en général pour des calculs récurrents ou itératifs.
Nous illustrons ces phénomènes sur deux exemples.
Exemple 1 : On considère l’intégrale
Z 1
xn
dx, n ∈ N
0 10 + x
que l’on cherche à évaluer numériquement. Un calcul direct montre que I0 = ln( 11
10
). De
plus, on a
Z 1 Z 1 
x n−1 10 1
In = x dx = 1+ xn−1 dx = − 10In−1
0 10 + x 0 10 + x n

9
On peut donc calculer successivement les valeurs de In en utilisant la récurrence I0 =
ln 11
10
, In = 1
n
− 10 In−1 . Numériquement, cela conduit à des résultats très mauvais. Cela
provient du fait que l’erreur d’arrondi ∆ In sur le calcul de In vérifie ∆In ≈ 10∆In−1 , si
l’on néglige l’erreur d’arrondi sur n1 . On voit donc que l’erreur croit exponentiellement :
l’erreur sur I0 est multipliée par 10n sur In . Par conséquent cette formule de récurrence
ne peut pas nous permettre de calculer la valeur de I3 6 par exemple. Pour remédier à ce
problème, on peut renverser la récurrence c’est-à-dire considérer la formule :
 
1 1
In−1 = − In
10 n

. Toujours en négligeant l’erreur d’arrondi sur n1 , on obtient alors ∆In−1 ≈ 1


10
∆In . En
utilisant l’encadrement 10 ≤ 10 + x ≤ 11 pour x ∈ [0, 1], on montre que

1 1
≤ In ≤ .
11 (n + 1) 10 (n + 1)
1
L’approximation In ≈ 11(n+1) nous permet alors de calculer une valeur de départ pour
1
notre récurrence renversée. Par exemple, si l’on part de I46 ≈ 11(46+1) , on obtiendra pour
−10
I36 une 11 erreur relative meilleure que 10 .
On constate ici l’importance du coefficient d’amplification d’erreur pour ce genre de
calcul.
Exemple 2 : On considère la suite définie par :

u0 = 2

u1 = −4
un = 111 − u1130 3000

+

n−1 un−1 un−2

introduite par J.-M. Muller. On peut alors montrer que la limite de cette suite est égale à 6
et malgré cela, quelque soit le système et la précision utilisés, cette suite semblera tendre
vers 100. L’explication de ce phénomène étrange est assez simple : la solution générale de
la récurrence un = 111 − u1130
n−1
3000
+ un−1 un−2
est donnée par :

α100n+1 + β6n+1 + γ5n+1


un =
α100n + β6n + γ5n

où α, βetγ dépendent des valeurs initiales u0 et u1 . Par conséquent, si α 6= 0, la suite


converge vers 100 et sinon (siβ 6= 0) la suite converge vers 6. Dans notre exemple, les
valeurs initiales u0 = 2 et u1 = −4 correspondent à α = 0, β = −3etγ = 4. Par conséquent,
la limite exacte de la suite est 6. Mais à cause des erreurs d’arrondi, même les premiers
termes calculés seront différents des termes exacts et donc la valeur de α correspondant
à ces termes calculés sera très petite mais non-nulle ce qui suffira à faire en sorte que la
suite converge vers 100 au lieu de 6.

10
1.2.6 Erreur amont et erreur aval
Considérons un problème que l’on résout à l’aide d’un algorithme numérique et
appelons f la fonction qui fait correspondre à l’entrée x de l’algorithme la solution
algébrique y = f (x). En pratique, compte tenu des erreurs d’arrondis, étant donnée
une entrée x, nous allons obtenir une sortie ȳ qui sera distincte de la solution algébrique
y = f (x). L’erreur aval est alors la différence entre le résultat ȳ obtenu et la solution
algébrique y. L’erreur amont ou erreur inverse est le plus petit δx tel que la solution
algébrique f (x + δx) correspondant à l’entrée x + δx soit égale à ȳ. Ces deux erreurs
sont liées par le conditionnement (voir Chapitre ??) : l’erreur aval étant du même ordre
que l’erreur amont multipliée par le conditionnement. L’erreur amont est en général plus
intéressante que l’erreur aval car elle nous renseigne sur le problème qui est réellement
résolu par l’algorithme numérique. De plus, en pratique, nous ne connaissons en général
qu’une valeur approchée de l’entrée (par exemple obtenue par une mesure).

1.2.7 Outils théoriques de l’analyse d’erreurs


Considérons la formule (x × y) + z pour trois réels x, y et z d’un domaine
F (β, t, emin , emax ).
On a alors :

fl((x × y) + z) = [fl(x × y) + z] (1 + δ1 )
= [(x × y)(1 + δ2 ) + z] (1 + δ1 )
= (x × y)(1 + δ2 )(1 + δ1 ) + z(1 + δ1 )

d’après le théorème 1.7, avec de plus |δi | < u, pour i = 1, 2.


Lemme 1.8 Si pour tout i = 1, ..., k, on a |δi < u| et si ku < 1, alors il existe θk tel que
ku
et ki=1 (1 + δi ) avec < j > . < k >=< j + k >, on a alors
Q
|θk | ≤ 1−ku

fl((x × y) + z) = (x × y) < 2 > +z < 1 >


2u u
≤ (x × y)(1 + ) + z(1 + )f
1 − 2u 1−u

11

Vous aimerez peut-être aussi