2014-11-17 8 views
5

sto cercando di utilizzare la libreria Rmpfr con la funzione round() di applicare la regola round half to even e raggiungere risultati corretti, senza errori dovuti alla precisione finito di valori puntuali float, come descritto here.Utilizzo Rmpfr per arrotondare con precisione in R

Finora, questo è quello che ho raggiunto:

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" 

Ma in alcuni casi non ottengo i risultati desiderati:

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

la lettura dei documenti Rmpfr, al roundMpfr() funzione, dice:

Il metodo di gruppo classe mpfr Math2 implementa un metodo per round (x, cifre) whi ch rounds a cifre decimali.

Ma non riesco a capire come usarlo.

Come è possibile ottenere risultati arrotondati desiderati utilizzando Rmpfr?

+0

provare roundMpfr() anziché round(). – Thell

risposta

3

Parlare con il manutentore di Rmpfr su questo problema, sembra essere un bug nella libreria.

This commit risolto il problema.

Dopo l'esecuzione install.packages("Rmpfr") per installare la versione aggiornata della libreria, ora ottengo:

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

che ora è corretto.

Problemi correlati