中澤さんからのコメントがありました。ありがとうございます。
> 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