A menudo termino en situaciones en las que es necesario verificar si la diferencia obtenida está por encima de la precisión de la máquina. Parece que para este propósito R tiene una variable útil: .Machine$double.eps
. Sin embargo, cuando recurro al código fuente R para obtener pautas sobre el uso de este valor, veo múltiples patrones diferentes.
Ejemplos
Aquí hay algunos ejemplos de la stats
biblioteca:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
integrar.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.
Preguntas
- ¿Cómo entender el razonamiento detrás de todas esas diferentes
10 *
,100 *
,50 *
ysqrt()
modificadores? - ¿Existen pautas sobre el uso
.Machine$double.eps
para ajustar las diferencias debido a problemas de precisión?
double.eps
. Si está realizando varias operaciones en un número de coma flotante, entonces su tolerancia a errores también debería ajustarse. Es por eso que all.equal te da una tolerance
discusión.