5

here で説明されているように、浮動小数点値の有限精度によるエラーなしで、ラウンドハーフを偶数ルールに適用し、正しい結果を達成する関数で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()

mpfr クラス グループ メソッド Math2 は、10 進数に丸める round(x, digits) のメソッドを実装します。

しかし、私はそれを使用する方法を理解できません。

を使用して望ましいラウンド結果を得るにはどうすればよいRmpfrですか?

4

1 に答える 1

3

この問題についてのメンテナーと話しているとRmpfr、ライブラリのバグだったようです。

このコミットは問題を修正しました。

install.packages("Rmpfr")ライブラリの更新されたバージョンをインストールするために実行した後、次のようになります。

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

これは正しいです。

于 2014-11-29T18:34:06.300 に答える