В R, почему это неверно для y> 2?Почему exp (log (6)) == exp (log (3)) * 2 return FALSE в R?
y <- c(1, 2, 3, 4, 5)
x <- 2*y
exp(log(x)) == exp(log(y)) * 2
[1] TRUE TRUE FALSE FALSE FALSE
В R, почему это неверно для y> 2?Почему exp (log (6)) == exp (log (3)) * 2 return FALSE в R?
y <- c(1, 2, 3, 4, 5)
x <- 2*y
exp(log(x)) == exp(log(y)) * 2
[1] TRUE TRUE FALSE FALSE FALSE
Цифровая точность. Попробуйте вычисления разницы:
exp(log(x)) - exp(log(y)) * 2
Вы могли бы использовать что-то вроде:
all.equal(exp(log(x)) , exp(log(y)) * 2)
Или что-то вроде 'apply (cbind (exp (log (x)), exp (log (y)) * 2), 1, function (tmp) all.equal (tmp [[1]], tmp [[2] ])) 'для проверки каждого элемента. – Roland
Ровно, то numerci точность является причиной. Попробуйте это, еще более простой расчет
1/2+1/3+1/6 #equal to 1
(1/2+1/3+1/6)-1 # should be 0
[1] -1.110223e-16
В первой строке отображается '1', но это не '' равно 1 ''. – nobar
Ошибка округления с плавающей точкой. Вы заметите, что 'exp (log (y))' не точно '3'. Прочитайте [Что должен знать каждый компьютерный ученый о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –
Спасибо. В этом случае я знаю из теории, что результаты должны быть одинаковыми. Как сравнить результаты в случае, когда я не знаю, должны ли они быть равными? Невозможно? –
Но 'exp (log (y))' возвращает '[1] 1 2 3 4 5' и' exp (log (x)) 'возвращает' [1] 2 4 6 8 10', что именно то, что вводит в заблуждение меня. –