Ich lande oft in Situationen, in denen überprüft werden muss, ob der ermittelte Unterschied über der Maschinengenauigkeit liegt. Scheint für diesen Zweck R hat eine handliche Variable:.Machine$double.eps
. Wenn ich mich jedoch an den R-Quellcode wende, um Richtlinien zur Verwendung dieses Werts zu erhalten, werden mehrere unterschiedliche Muster angezeigt.
Beispiele
Hier einige Beispiele aus stats
Bibliothek:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
integrieren.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]))
usw.
Fragen
- Wie kann man die Gründe für all diese verschiedenen verstehen
10 *
,100 *
,50 *
undsqrt()
Modifikatoren? - Gibt es Richtlinien
.Machine$double.eps
zur Anpassung von Unterschieden aufgrund von Präzisionsproblemen?
double.eps
. Wenn Sie mehrere Operationen mit einer Gleitkommazahl ausführen, sollte sich auch Ihre Fehlertoleranz anpassen. Deshalb gibt Ihnen all.equal ein tolerance
Argument.