L'epsilon machine, ou précision machine, est une limite supérieure de l' erreur d'approximation relative due à l'arrondi dans les systèmes de nombres à virgule flottante . Cette...
Dans la définition courante , l'epsilon machine est indépendant de la méthode d'arrondi et est simplement défini comme la différence entre 1 et le nombre à virgule flottante immédiatement supérieur .
Dans la définition formelle , l'epsilon machine dépend du type d'arrondi utilisé et est également appelé arrondi unitaire , symbolisé par le symbole romain gras.
On peut généralement considérer que les deux termes diffèrent simplement par un facteur deux, la définition formelle donnant un epsilon deux fois plus petit que la définition courante , comme résumé dans les tableaux de la section suivante.
Valeurs pour les calculs arithmétiques matériels standard
Le tableau suivant répertorie les valeurs epsilon machine pour les formats à virgule flottante standard.
Définition formelle ( epsilon de la machine à arrondir )
La définition formelle de l'epsilon machine est celle utilisée par le professeur James Demmel dans ses supports de cours , le logiciel d'algèbre linéaire LAPACK , des articles de recherche en calcul numérique . La plupart des analystes numériques utilisent indifféremment les termes « epsilon machine » et « arrondi unitaire » avec cette signification, qui est explorée en détail dans cette sous-section.
L'arrondi est une procédure permettant de choisir la représentation d'un nombre réel dans un système de nombres à virgule flottante . Pour un système de nombres et une procédure d'arrondi donnés, l'epsilon machine correspond à l' erreur relative maximale de la procédure d'arrondi choisie.
Il est nécessaire de fournir quelques informations de base pour déterminer une valeur à partir de cette définition. Un système de nombres à virgule flottante est caractérisé par une base, également appelée radix .
Puisque l'epsilon machine est une borne pour l'erreur relative, il suffit de considérer des nombres avec un exposantIl suffit également de considérer les nombres positifs. Pour l'arrondi classique au plus proche, l'erreur d'arrondi absolue est au plus égale à la moitié de l'écart, soitCette valeur représente le numérateur maximal possible de l'erreur relative. Le dénominateur de l'erreur relative est le nombre arrondi, qui doit être aussi petit que possible pour maximiser l'erreur relative. L'erreur relative la plus importante se produit donc lorsque l'arrondi est appliqué à des nombres de la forme :oùse situe entreetTous ces nombres sont arrondis àavec erreur relativeLe maximum est atteint lorsquese situe dans la partie supérieure de sa plage de valeurs.Le facteur au dénominateur est négligeable par rapport au numérateur, il est donc omis par souci de simplification.est considéré comme l'epsilon machine. Comme cela a été démontré ici, l'erreur relative est la plus importante pour les nombres qui s'arrondissent à, l'epsilon machine est également appelé arrondi unitaire, ce qui signifie approximativement « l'erreur maximale pouvant survenir lors de l'arrondi à la valeur unitaire ».
Ainsi, l'espacement maximal entre un nombre à virgule flottante normalisé,, et un nombre normalisé adjacent est.
Modèle arithmétique
L'analyse numérique utilise l'epsilon machine pour étudier les effets des erreurs d'arrondi. Les erreurs réelles de l'arithmétique machine étant beaucoup trop complexes pour être étudiées directement, on utilise plutôt le modèle simplifié suivant. La norme arithmétique IEEE stipule que toutes les opérations en virgule flottante sont effectuées comme s'il était possible de réaliser une opération en précision infinie, puis le résultat est arrondi à un nombre en virgule flottante. Supposons (1),sont des nombres à virgule flottante, (2)est une opération arithmétique sur des nombres à virgule flottante telle que l'addition ou la multiplication, et (3)est l'opération de précision infinie. Conformément à la norme, l'ordinateur calcule :
Selon la définition de l'epsilon machine, l'erreur relative d'arrondi est au plus égale à l'epsilon machine en valeur absolue, donc :
oùen magnitude absolue est au plusou u . Les ouvrages de Demmel et Higham cités en référence peuvent être consultés pour voir comment ce modèle est utilisé pour analyser les erreurs, par exemple, de l'élimination gaussienne .
Définition courante ( Epsilon de la machine à intervalles )
Cette définition alternative est beaucoup plus répandue : l’epsilon machine est la différence entre 1 et le nombre à virgule flottante immédiatement supérieur . Cette définition est utilisée dans les constantes des langages Ada , C , C++ , Fortran , MATLAB , Mathematica , Octave , Pascal , Python et Rust , etc., et est définie dans des ouvrages comme « Numerical Recipes » de Press et al .
La prévalence de cette définition tient à son utilisation dans la norme ISO C pour les constantes relatives aux types à virgule flottante et aux constantes correspondantes dans d'autres langages de programmation. Elle est également largement utilisée dans les logiciels de calcul scientifique et dans la littérature en calcul numérique.
Comment déterminer l'epsilon machine
Lorsque les bibliothèques standard ne fournissent pas de valeurs précalculées (par exemple FLT_EPSILON, ` int` DBL_EPSILONet `float` LDBL_EPSILONen C , ` std::numeric_limits<T>::epsilon()int` en C++ ou java.lang.Float.EPSILON`int` java.lang.Double.EPSILONen Java ), la meilleure façon de déterminer l'epsilon machine est de se référer au tableau ci-dessus et d'utiliser la formule de puissance appropriée. Le calcul de l'epsilon machine est souvent proposé comme exercice. Les exemples suivants calculent l'epsilon machine d'intervalle en fonction de l'espacement des nombres à virgule flottante à 1, et non en fonction de l'arrondi à l'unité.
Notez que les résultats dépendent du format à virgule flottante utilisé, tel que float, double, long double, ou similaire pris en charge par le langage de programmation, le compilateur et la bibliothèque d'exécution de la plateforme réelle.
Certains formats pris en charge par le processeur peuvent ne pas l'être par le compilateur et le système d'exploitation choisis. D'autres formats peuvent être émulés par la bibliothèque d'exécution, notamment l'arithmétique à précision arbitraire disponible dans certains langages et bibliothèques.
Au sens strict, le terme machine epsilon signifie lela précision directement prise en charge par le processeur (ou le coprocesseur ), et non par un tiers.la précision prise en charge par un compilateur spécifique pour un système d'exploitation spécifique, sauf si celui-ci est connu pour utiliser le meilleur format.
Les formats à virgule flottante IEEE 754 ont la propriété que, lorsqu'ils sont réinterprétés comme un entier en complément à deux de même largeur, ils augmentent de façon monotone pour les valeurs positives et diminuent de façon monotone pour les valeurs négatives (voir la représentation binaire des nombres à virgule flottante 32 bits ). Ils ont également la propriété que, et(oùest la réinterprétation entière susmentionnée deDans les langages qui autorisent la conversion de types et utilisent toujours la norme IEEE 754–1985, nous pouvons exploiter cette propriété pour calculer un epsilon machine en temps constant. Par exemple, en C :
union DoubleBits { int64_t i ; double d ; };double epsilon ( double valeur ) { union DoubleBits s ; s . d = valeur ; s . i ++ ; return s . d - valeur ; }
Cela donnera un résultat de même signe que la valeur. Si un résultat positif est toujours souhaité, l' instruction de retour epsilon()peut être remplacée par :
Les doubles 64 bits donnent 2,220446e-16, ce qui est 2 −52 comme prévu.
Approximation
L'algorithme simple suivant peut être utilisé pour approximer recherche linéaire .
epsilon = 1,0 ; tant que (1,0 + 0,5 * epsilon) ≠ 1,0 : epsilon = 0,5 * epsilon
La machine epsilon,peut également être calculé simplement comme deux à la puissance négative du nombre de bits utilisés pour la mantisse.
Relation avec l'erreur relative absolue
Siest la représentation machine d'un nombrealors l'erreur relative absolue dans la représentation est
Preuve
La preuve suivante est limitée aux nombres positifs et aux représentations machine utilisant round-by-chop .
Siest un nombre positif que nous voulons représenter, il sera compris entre un nombre machineci-dessouset un numéro de machineau-dessus de.
Si, oùsi n est le nombre de bits utilisés pour la magnitude de la mantisse , alors :
Depuis la représentation desera soitou,
Bien que cette preuve soit limitée aux nombres positifs et à l'arrondi par découpage, la même méthode peut être utilisée pour prouver l'inégalité en relation avec les nombres négatifs et les représentations machine arrondies au plus proche .