Tout ce que vous avez toujours voulu savoir sur les flottants sans jamais oser le demander Laurent Fousse laurent.fousse@imag.fr 12 novembre 2007
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Ils sont partout Les nombres flottants sont utilisés partout :
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers, dans votre lecteur de DVD,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers, dans votre lecteur de DVD, dans votre lecteur MP3 portable,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers, dans votre lecteur de DVD, dans votre lecteur MP3 portable, dans votre téléphone portable,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers, dans votre lecteur de DVD, dans votre lecteur MP3 portable, dans votre téléphone portable, dès que vous regardez une image JPEG sur le web,
Ils sont partout Les nombres flottants sont utilisés partout : pour les simulations numériques, pour les calculs scientifiques divers, dans votre lecteur de DVD, dans votre lecteur MP3 portable, dans votre téléphone portable, dès que vous regardez une image JPEG sur le web, lorsque vous jouez avec votre PS3.
Exemple de mauvaise utilisation des flottants Conversion d un nombre flottant 64 bits vers un entier 16 bits, Échec de conversion (constante trop grande), Panne du Système de Référence Inertielle, Perte totale d information de guidage, Explosion (500 millions de dollars).
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Nombre flottant x = s m β e s { 1, 1} (signe), m N (mantisse), β 2 entier (base), e Z (exposant). Exemple : x = 101010 2 2 12 est un flottant en base β = 2 avec une mantisse de 6 bits.
Addition sur les flottants x = 101010 2 2 12, y = 101001101101 2 3. x -101010000000000000, 000 y 101001101, 101 x + y -101001111010110010, 011 Flottants «suite de bits avec un décalage»
Multiplication de flottants x = s 1 m 1 2 e 1 y = s 2 m 2 2 e 2 xy = (s 1 s 2 ) (m 1 m 2 ) 2 e 1+e 2 101010 2 12 101001101101 2 3 1101101011110001 2 10 Note 0 m 1, m 2 < 2 p donc 0 m 1 m 2 < 2 2p s écrit en général sur 2p bits.
Arrondis Les flottants ne simulent qu imparfaitement les réels : sin(42) = 0, 916521547915633785... 0, 91652154? 0, 91652155? (sin(42)) = 0, 91652155 [arrondi au plus proche] sin(42) 0, 91652155 0, 91652154
L importance de l arrondi Exemple : échec d un anti-missile Patriot (25 février 1991), ou «petite erreur deviendra grosse». horloge interne en 1/10 de seconde, erreur de troncation sur la constante 1/10 en binaire, erreur totale de 0, 34s, pour une vitesse de 1600m/s, 28 morts.
L importance de l arrondi Sur le Patriot : 1 10 ε = 1 10 209715 2 21 10 7 3600 10 100 ε 0, 34 209715 2 21 Avec l arrondi au plus proche sur 24 bits : ( ) 1 13421773 2 27 10 3600 10 100 ε 0, 005
Flottants normalisés Definition (Flottant normalisé) Un flottant x = s m 2 e est dit normalisé sur p bits si 2 p 1 m < 2 p. Definition (Exposant) Pour un nombre réel non nul x on définit l exposant E(x) := 1 + log 2 x, de telle sorte que 2 E(x) 1 x < 2 E(x). Definition (Unit in the last place (ulp)) On appelle ulp de x = s m 2 e normalisé la valeur du bit de poids faible de x, et on note ulp(x) = 2 e.
Flottants normalisés Exemple : x = 42 = 101010 2 E(x) = 6 ulp 6 (x) = 1
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Norme IEEE 754 La norme IEEE 754 définit :
Norme IEEE 754 La norme IEEE 754 définit : des formats de nombres flottants et leur représentation en machine,
Norme IEEE 754 La norme IEEE 754 définit : des formats de nombres flottants et leur représentation en machine, des nombres spéciaux,
Norme IEEE 754 La norme IEEE 754 définit : des formats de nombres flottants et leur représentation en machine, des nombres spéciaux, des modes d arrondi,
Norme IEEE 754 La norme IEEE 754 définit : des formats de nombres flottants et leur représentation en machine, des nombres spéciaux, des modes d arrondi, des exceptions et autres subtilités passées sous silence.
Norme IEEE 754 La norme IEEE 754 définit : des formats de nombres flottants et leur représentation en machine, des nombres spéciaux, des modes d arrondi, des exceptions et autres subtilités passées sous silence. De plus la norme impose un comportement dit d «arrondi correct» pour certaines opérations.
Formats IEEE 754 Format Total e min e max Mantisse Exposant simple 32 126 127 24 8 simple étendu 43 1022 1023 32 11 double 64 1022 1023 53 11 double étendu 79 16382 16383 64 15 Note : 1 m < 2.
Nombres spéciaux IEEE 754 La norme définit des nombres spéciaux : des zéros signés (+0 et 0 sont différents), des infinis + et, NaN pour Not a Number, des dénormalisés.
Modes d arrondi La norme définit 4 modes d arrondi : l arrondi vers le bas l arrondi vers le haut l arrondi vers zéro l arrondi au plus proche x = 0, 1101 2 0, 110 2 0, 111 2
Modes d arrondi x = 0, 1101 2 = 13 16 x = 0, 110 2 = 3 4 x + = 0, 111 2 = 7 8 (x) = x (x) = x + (x) = x (x) = (x) = x
Arrondi correct Definition (Arrondi correct) Une opération respecte la règle de l arrondi correct si son résultat est l arrondi dans le mode d arrondi demandé par l utilisateur de l opération simulée sur des réels. Exemple (en base 10) : 12 = 3, 4641016151377545870... 6 ( 12) = 3, 46410 6 ( 12) = 3, 46411 6 ( 12) = 3, 46410 La norme impose aux opérations +,,, et de respecter la règle de l arrondi correct.
Arrondi correct Application : (a + b) (a + b) 1 ulp( (a + b)). 2 Sinon l un des nombres flottants voisins du flottant (a + b) est plus proche de a + b, ce qui est absurde pour un arrondi au plus proche.
Propriétés des flottants IEEE 754 1 +0 = + 1 + = +0 1 = (+ ) (+ ) = NaN F Q F n est pas stable par l addition, la multiplication, la division. Exemple en simple précision : x = 101101011011011011010111 2 8 y = 110000011011111011000000 2 1 101101011011011011010111000000000 2 1 + 110000011011111011000000 2 1 101101100001011110110110011000000 2 1 101101100001011110110110 2 8
Avantages de la norme les nombres flottants sont portables d un système à l autre,
Avantages de la norme les nombres flottants sont portables d un système à l autre, les opérations sont uniquement définies,
Avantages de la norme les nombres flottants sont portables d un système à l autre, les opérations sont uniquement définies, les programmes ont un comportement unique,
Avantages de la norme les nombres flottants sont portables d un système à l autre, les opérations sont uniquement définies, les programmes ont un comportement unique, les programmes numériques sont analysables.
Exemple de propriété Theorem (Sterbenz) Si y/2 x 2y alors x y est exactement représentable.
Insuffisances de la norme seules les opérations simples sont couvertes (pas log, sin,... ),
Insuffisances de la norme seules les opérations simples sont couvertes (pas log, sin,... ), l enchaînements de plusieurs opérations doit s analyser par étapes,
Insuffisances de la norme seules les opérations simples sont couvertes (pas log, sin,... ), l enchaînements de plusieurs opérations doit s analyser par étapes, et si on veut plus de précision?
Cancellation Exemple en base 10 avec 8 chiffres de précision. x = 13681792 y = 90234375 z = 93649243 t = 13182893 xy = 1234567950000000 (xy) = 12345680 10 8 zt = 1234567949999999 (zt) = 12345679 10 8 xy zt = 1 (xy) (zt) = (12345680 12345679) 10 8 = 10 8
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Un exemple d opération complexe : l intégration Un système célèbre de calcul formel : \^/ Maple 10 (IBM INTEL LINUX)._ \ / _. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2005 \ MAPLE / All rights reserved. Maple is a trademark of < > Waterloo Maple Inc. Type? for help. > evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.2604007480 10
Un exemple d opération complexe : l intégration Un système célèbre de calcul formel : \^/ Maple 10 (IBM INTEL LINUX)._ \ / _. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2005 \ MAPLE / All rights reserved. Maple is a trademark of < > Waterloo Maple Inc. Type? for help. > evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.2604007480 10 > Digits:=20: evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.34288028340847034512 10
Un exemple d opération complexe : l intégration Un système célèbre de calcul formel : \^/ Maple 10 (IBM INTEL LINUX)._ \ / _. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2005 \ MAPLE / All rights reserved. Maple is a trademark of < > Waterloo Maple Inc. Type? for help. > evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.2604007480 10 > Digits:=20: evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.34288028340847034512 10 > Digits:=50: evalf(int(exp(-x^2)*ln(x), x=17..42)); -128 0.49076783443012876473973482836733778547443399549250 10
Un exemple d opération complexe : l intégration Un système célèbre de calcul formel : \^/ Maple 10 (IBM INTEL LINUX)._ \ / _. Copyright (c) Maplesoft, a division of Waterloo Maple Inc. 2005 \ MAPLE / All rights reserved. Maple is a trademark of < > Waterloo Maple Inc. Type? for help. > evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.2604007480 10 > Digits:=20: evalf(int(exp(-x^2)*ln(x), x=17..42)); -126 0.34288028340847034512 10 > Digits:=50: evalf(int(exp(-x^2)*ln(x), x=17..42)); -128 0.49076783443012876473973482836733778547443399549250 10 > Digits:=100: evalf(int(exp(-x^2)*ln(x), x=17..42)); -128 0.49076783443012876473973482836733778547443399549250[...] 10
Un exemple d opération complexe : l intégration 42 17 exp( x 2 ) log xdx 0, 2565728500 10 126 Précision demandée Réponse Maple Chiffres corrects 10 0, 2604007480 10 126 1, 8 20 0, 3428802834 10 126 0, 6 50 0, 4907678344 10 128 1, 7 100 0, 4907678344 10 128 1, 7
Un exemple d opération complexe : l intégration 42 17 exp( x 2 ) log xdx 0, 2565728500 10 126 Précision demandée Réponse Maple Chiffres corrects 10 0, 2604007480 10 126 1, 8 20 0, 3428802834 10 126 0, 6 50 0, 4907678344 10 128 1, 7 100 0, 4907678344 10 128 1, 7 augmenter la précision nous a conforté dans notre erreur!
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Ce qui change de la précision fixe chaque variable flottante dispose de sa propre précision p,
Ce qui change de la précision fixe chaque variable flottante dispose de sa propre précision p, la complexité des opérations change,
Ce qui change de la précision fixe chaque variable flottante dispose de sa propre précision p, la complexité des opérations change, les calculs peuvent devenir arbitrairement précis...
Ce qui change de la précision fixe chaque variable flottante dispose de sa propre précision p, la complexité des opérations change, les calculs peuvent devenir arbitrairement précis... si on en paie le prix.
Complexité des opérations de base Opération Addition Multiplication Division Précision fixe O(1) O(1) O(1) Précision p O(p) O(M(p)) O(M(p))
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Définition La fonction erf est définie par erfx = 2 π x 0 e t2 dt et son développement à l origine est donné par erfx = 2 ( 1) i π i!(2i + 1) x 2i+1 i=0
Définition La fonction erf est définie par erfx = 2 π x 0 e t2 dt et son développement à l origine est donné par erfx = 2 ( 1) i π i!(2i + 1) x 2i+1 i=0 = 2 k ( 1) i π i!(2i + 1) x 2i+1 +R k i=0 }{{} S k
Algorithme L algorithme de calcul est donc : 1 Choisir «correctement» k assez grand,
Algorithme L algorithme de calcul est donc : 1 Choisir «correctement» k assez grand, 2 Calculer S k et une borne d erreur d arrondi ɛ k,
Algorithme L algorithme de calcul est donc : 1 Choisir «correctement» k assez grand, 2 Calculer S k et une borne d erreur d arrondi ɛ k, 3 Borner R k,
Algorithme L algorithme de calcul est donc : 1 Choisir «correctement» k assez grand, 2 Calculer S k et une borne d erreur d arrondi ɛ k, 3 Borner R k, 4 Vérifier si l on peut arrondir, sinon augmenter la précision et aller en 2.
Analyse d erreur mathématique La série est alternée et son terme général décroît pour k x 2 donc le reste est borné par le dernier terme. Avec on obtient R k k! k x 2 ( ) k k 2πk, e x 2k+3 (k + 1)!(2k + 3) 1 5 ( x 2 e k ) k
Analyse d erreur mathématique Pour avoir R k 2 n il suffit donc de prendre k k 0 avec k 0 log 2 k 0 x 2 e = n
Algorithme de calcul détaillé ENTRÉE : k nombre de termes à sommer, x. SORTIE : Ŝk. 1: t 1 2: s 1 3: y (x 2 ) 4: for i 1 to k do 5: t (ty) 6: t (t/i) 7: u (t/(2i + 1)) 8: s (s + ( 1) i u) 9: end for
Analyse de l erreur d arrondi Pour l analyse d erreur on a pour deux flottants a et b sur p bits : (ab) = (1 + θ)ab avec θ 2 1 p. On a donc à l étape i t = x 2k k! i (1 + θ j )(1 + θ y )(1 + θ j ) j=1 soit une erreur relative sur û bornée par (1 + θ) 3i+1 1.
Analyse de l erreur d arrondi L erreur sur s : ŝ i s i = ŝ i (ŝ i 1 + ( 1) i û) + (ŝ i 1 + ( 1) i û) s i ŝ i s i 1 2 ulp(ŝ i + ŝ i 1 s i 1 + û û ŝ k s k 1 2 ulp(ŝ i ) + (3i + 1)ulp(û) + ŝ i 1 s i 1 k i=1 ( ) 1 2 ulp(ŝ i ) + (3i + 1)ulp(û).
Conclusion Pour calculer ɛ k il faut encore tenir compte de la multiplication par c = 2 π : ĉ = (1 + θ) 2 π Ŝ k = (1 + θ) 2 2 π ŝ k puis vérifier que (Ŝk ɛ k R k ) = (Ŝk + ɛ k + R k ).
Complexité de l algorithme ENTRÉE : k nombre de termes à sommer, x. SORTIE : Ŝk. 1: t 1 2: s 1 3: y (x 2 ) O(M(p)) 4: for i 1 to k do 5: t (ty) O(kM(p)) 6: t (t/i) O(kp) 7: u (t/(2i + 1)) O(kp) 8: s (s + ( 1) i u) O(kp) 9: end for
Plan 1 Introduction 2 Nombres flottants Flottant Norme IEEE 754 Votre logiciel de calcul vous ment 3 Précision arbitraire Présentation Exemple de calcul en précision arbitraire : la fonction erf Le dilemme du fabriquant de tables
Présentation du problème On souhaite calculer f (x) avec n bits corrects pour l arrondi au plus proche. On calcule f (x) avec une erreur relative sur f (x) plus petite que 2 m. m bits {}}{ f (x) = } 1.xxxxx {{... xxxx} 1000000000 xxxx n bits Dans ce cas la valeur calculée pour f (x) est au milieu entre deux flottants, plus une erreur qui ne nous permet pas de déterminer de quel côté trancher.
Interprétation graphique f (x)? f (x) f (x) + En faisant une hypothèse probabiliste ce cas se produit avec une probabilité 2 m n 1. D où la stratégie «en peau d oignon» de Ziv : 1 Prendre g = 20. 2 Faire le calcul en précision n + g bits. 3 Si on ne peut pas conclure, g 2g et reprendre en 2.