2014-11-17 8 views
5

Próbuję użyć biblioteki Rmpfr z funkcją round() aby zastosować regułę round half to even i uzyskania poprawnych wyników, bez błędów z powodu skończonej precyzji wartości punktowych float, jak opisano here.Korzystanie Rmpfr zaokrąglić z dokładnością w R

Jak dotąd, jest to, co już osiągnięte:

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" 

Jednak w niektórych przypadkach nie uzyskania pożądanych wyników:

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

przeczytaniu Rmpfr Dokumentach Pod roundMpfr() funkcja, mówi:

Metoda grupy mpfr Math2 implementuje metodę dla rundy (x, cyfry) whi ch zaokrągla do cyfr dziesiętnych .

Ale nie mogę wymyślić, jak z niego korzystać.

Jak mogę uzyskać pożądane wyniki w rundzie przy użyciu Rmpfr?

+0

Spróbuj roundMpfr() zamiast round(). – Thell

Odpowiedz

3

Rozmowa z opiekunem Rmpfr o tym numerze wygląda na błąd w bibliotece.

This commit Naprawiono problem.

Po uruchomieniu install.packages("Rmpfr") zainstalować zaktualizowaną wersję biblioteki, teraz uzyskać:

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

która obecnie jest prawidłowe.

Powiązane problemy