2016-10-12 8 views
0

Я знаю, что запуск простой строки, такой как sqrt(2)^2 == 2, вернет FALSE, но когда я создам объект с левой частью уравнения, он возвращает значение 2, но при логическом сравнении объекта с номером 2 я все равно получаю FALSE. Это кажется ошибочным. Вот код:R не возвращает true, когда объект [sqrt 2^2] == 2

> (root.of.2 <- sqrt(2)) 
[1] 1.414214 
> (root.of.2.sqrd <- sqrt(2)^2) 
[1] 2 
> (root.of.2.sqrd == 2) 
[1] FALSE 

Что здесь происходит?

ответ

3

Осмотрите ближе переменную:

> print(root.of.2.sqrd,18) 
[1] 2.0000000000000004 

корень.2.sqrd является числовым.

> as.integer(root.of.2.sqrd)==2 
[1] TRUE 

Read FAQ 7.31

Кстати, есть подобные questions.

1

Они разные номера (SQRT (2) является иррациональным в какой-то момент времени некоторые численные погрешности, однако мало, будут введены с его рациональное приближение):

print(sprintf('%.20f', 2)) 
#[1] "2.00000000000000000000" 
print(sprintf('%.20f', sqrt(2)^2)) 
#[1] "2.00000000000000044409"