R语言如何求大整数的平方根? (包 gmp 没有 bigz 的 sqrt)

How to find the square root of a big integer in R language? (package gmp doesn't have sqrt for bigz)

我正在尝试用 R 语言求一个大整数的平方根。我正在使用包 gmp,它为大整数提供 bigz,但它似乎缺少平方根函数。如果需要,我愿意为大整数使用另一个包。

library(gmp)
 sqrt(as.bigz("113423713055421844361000443349850346743"))
Error: 'Math.bigz' is not implemented yet

或者,我正在寻找一种使用 bigz 实现 sqrt 的方法。

这种类型的问题正是 Rmpfr 软件包的目标。

library(Rmpfr)
a <- mpfr("113423713055421844361000443349850346743", 128)  ## specify the number of bits
sqrt(a)
1 'mpfr' number of precision  128   bits 
[1] 10650056950806500000.00000005163589039117

需要注意的是,为了获得这个包的强大功能,您必须首先将您的变量声明为一个 mpfr 对象。完成此操作后,您可以轻松地执行任意数量的算术运算,达到任意数量的位精度(取决于内存)。

有时您可能想使用日志来计算大数。 IE。 x^y = exp(y*log(x))。

library(gmp)
x <- 113423713055421844361000443349850346743
as.bigz(exp(0.5*log(as.bigz(x))))
Big Integer ('bigz') :
[1] 10650056950806493184