Article de reference

Machine epsilon

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...

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 valeur caractérise l'arithmétique informatique dans le domaine de l'analyse numérique , et par extension en sciences informatiques . Cette quantité est également appelée « macheps » et son symbole est l' epsilon grec.

Il existe deux définitions courantes, désignées ici comme epsilon de la machine à arrondir ou définition formelle et epsilon de la machine à intervalles ou définition courante .

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 exposantarrondi 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é,

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)

Selon la définition de l'epsilon machine, l'erreur relative d'arrondi est au plus égale à l'epsilon machine en valeur absolue, donc :

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 .

Selon cette définition,

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 le

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

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 :

retourner s.i < 0 ? valeur - s.d : s.d - valeur ;

Exemple en Python :

from typing import Callabledef epsilon ( func : Callable [[ float ], float ] = float ) -> float : eps : float = func ( 1 ) while func ( 1 ) + eps != func ( 1 ): eps_last : float = eps eps = func ( eps ) / func ( 2 ) return eps_last

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,

Relation avec l'erreur relative absolue

Si

Preuve

La preuve suivante est limitée aux nombres positifs et aux représentations machine utilisant round-by-chop .

Si

Si

Depuis la représentation de

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 .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index