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