R округление объяснения - PullRequest
5 голосов
/ 28 октября 2011

Может ли кто-нибудь объяснить, почему это дает разные результаты?

round(1.49999999999999)
1


round(1.4999999999999999)
2

Я прочитал документацию раунда, но там ничего не говорится об этом.Я знаю, что R представляет числа в двоичной форме, но почему добавление двух дополнительных 9-ти меняет результат?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 28 октября 2011

1.4999999999999999 не может быть представлено внутри, поэтому оно округляется до 1.5.

Теперь, когда вы применяете round(), результат будет 2.

2 голосов
/ 28 октября 2011

Я никогда не использовал R, поэтому я не знаю, в этом ли проблема, но в других языках, таких как C / C ++, число типа 1.4999999999999999 представляется как число с плавающей запятой или двойное число.

Поскольку они имеют конечную точность, вы не можете точно представить что-то вроде 1.4999999999999999. Это может быть случай, когда 1.4999999999999999 фактически сохраняется как 1.50000000000000 из-за ограничений точности с плавающей запятой.

2 голосов
/ 28 октября 2011

Поместите эти два числа в переменную и затем напечатайте их - вы увидите, что они разные.

Компьютеры не хранят такого рода числа с таким точным значением (они не используют внутренне десятичные числа)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...