Finisco spesso in situazioni in cui è necessario verificare se la differenza ottenuta è superiore alla precisione della macchina. Sembra che per questo scopo R ha una variabile a portata di mano: .Machine$double.eps
. Tuttavia, quando passo al codice sorgente R per le linee guida sull'uso di questo valore, vedo più modelli diversi.
Esempi
Ecco alcuni esempi dalla stats
libreria:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
integrate.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]))
eccetera.
Domande
- Come si può comprendere il ragionamento che sta dietro tutti questi diversi
10 *
,100 *
,50 *
esqrt()
modificatori? - Esistono linee guida sull'utilizzo
.Machine$double.eps
per regolare le differenze dovute a problemi di precisione?
double.eps
. Se si eseguono diverse operazioni su un numero in virgola mobile, è necessario regolare anche la tolleranza dell'errore. Questo è il motivo per cui all.equal ti dà un tolerance
argomento.