Я часто оказываюсь в ситуациях, когда необходимо проверить, превышает ли полученная разница точность станка. Похоже , что для этой цели R имеет удобную переменную: .Machine$double.eps
. Однако, когда я обращаюсь к исходному коду R за рекомендациями по использованию этого значения, я вижу несколько разных шаблонов.
Примеры
Вот несколько примеров из stats
библиотеки:
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]))
и т.п.
Вопросов
- Как можно понять рассуждение за все эти разные
10 *
,100 *
,50 *
иsqrt()
модификаторы? - Существуют ли рекомендации по использованию
.Machine$double.eps
для корректировки различий из-за проблем с точностью?
double.eps
. Если вы выполняете несколько операций над числом с плавающей запятой, то и ваша погрешность должна быть скорректирована. Вот почему all.equal дает вам tolerance
аргумент.