Использование Rmpfr для точного округления в R

Я пытаюсь использовать библиотеку Rmpfr с функцией round(), чтобы применить округление половины до четного и добиться правильных результатов без ошибок из-за конечной точности значений с плавающей запятой, как описано здесь.

Пока вот чего я добился:

library(Rmpfr)
x <- c(1.225, 1.2225, 1.22225, 1.222225)
n <- c(2, 3, 4, 5)
round2 <- function(x, n){
  sprintf(paste("%#.", n, "f", sep=""), round(mpfr(as.character(x), 200), n))
}
mapply(round2, x, n)
#[1] "1.22"    "1.222"   "1.2222"  "1.22222"

Но в некоторых случаях я не получаю желаемых результатов:

round2(1.152, 2)# Should be 1.15
#[1] "1.16"

Читая документы Rmpfr, в функции roundMpfr() говорится:

Групповой метод Math2 класса mpfr реализует метод round(x, digits), который округляет до десятичных цифр.

Но я не могу понять, как его использовать.

Как я могу добиться желаемых результатов раунда, используя Rmpfr?


person art    schedule 17.11.2014    source источник
comment
попробуйте roundMpfr() вместо round().   -  person Thell    schedule 18.11.2014


Ответы (1)


Разговаривая с сопровождающим Rmpfr об этой проблеме, похоже, это была ошибка в библиотеке.

Этот коммит устранил проблему.

После запуска install.packages("Rmpfr") для установки обновленной версии библиотеки теперь я получаю:

library(Rmpfr)
sprintf("%#.2f", round(mpfr(1.152, 200),2))
#[1] "1.15"

Что теперь правильно.

person art    schedule 29.11.2014