裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

数値計算の落とし穴(非常に希なケース?)その2

2020年10月27日 | ブログラミング

中澤さんからのコメントがありました。ありがとうございます。

> library(Rmpfr)
> as.integer(log(mpfr(16677181699666574,100))/log(mpfr(3,100)))

が正しく 34 になるとの指摘があった。その通りではあるが,正確に言えば

> as.integer(log(mpfr("16677181699666574",100))/log(mpfr(3,100)))

double の精度を超える数値を mpfr するには,文字型で与えないといけないようだ。

> prec = 100;log(mpfr(16677181699666569,prec))/log(mpfr(3,prec))
1 'mpfr' number of precision  100   bits 
[1] 33.999999999999999945420080981413 # 誤差あり

> prec = 100;log(mpfr("16677181699666569",prec))/log(mpfr(3,prec))
1 'mpfr' number of precision  100   bits 
[1] 34 # 3 の 34 乗は正確に 16677181699666569

コメント (1)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 数値計算の落とし穴(非常に... | トップ | 変数のスコープ »
最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
Unknown (中澤です)
2020-10-30 11:03:59
確かに,与えるとき文字列にしないと高精度の数値は与えられませんね。ご教示ありがとうございます。
返信する

コメントを投稿

ブログラミング」カテゴリの最新記事