Je me retrouve souvent dans des situations où il est nécessaire de vérifier si la différence obtenue est supérieure à la précision de la machine. On dirait à cette fin R a une variable à portée de main: .Machine$double.eps
. Cependant, lorsque je me tourne vers le code source R pour obtenir des instructions sur l'utilisation de cette valeur, je vois plusieurs modèles différents.
Exemples
Voici quelques exemples tirés de la stats
bibliothèque:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
integrer.R
rel.tol < max(50*.Machine$double.eps, 0.5e-28)
lm.influence.R
e[abs(e) < 100 * .Machine$double.eps * median(abs(e))] <- 0
princomp.R
if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L]))
etc.
Des questions
- Comment peut - on comprendre le raisonnement derrière tous ces différents
10 *
,100 *
,50 *
etsqrt()
modificateurs? - Existe-t-il des directives sur l'utilisation
.Machine$double.eps
pour ajuster les différences en raison de problèmes de précision?
double.eps
. Si vous effectuez plusieurs opérations sur un nombre à virgule flottante, votre tolérance aux erreurs doit également s'ajuster. C'est pourquoi all.equal vous donne un tolerance
argument.