Я часто опиняюся в ситуаціях, коли потрібно перевірити, чи отримана різниця вище машинної точності. Схоже , що для цієї мети 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
аргументи.