R:gmp:mod.bigz 的输出不准确

R: gmp: inaccurate output from mod.bigz

我下载了 gmp 包以计算mod非常大的数的平方幂。但是它的一个功能,mod.bigz,似乎超过了一定数量的数字就失效了。例如,100...00 mod 3 的答案应该是 1,因为 99...99 可以被 3 整除。但我得到的答案有时是 0 或 2。有什么办法可以解决这个问题或gmp 对非常大的数字不准确吗?

https://cran.r-project.org/web/packages/gmp/index.html

#install.packages('gmp')
library(gmp)
mod.bigz(100000000000000000000000000000000000000000000000000,3)
# 2
mod.bigz(10000000000000000000000000000000000000000000000000000000,3)
# 0

我认为我的总体建议是,当您的代码中有这些数字时,请避免在任何时候退回到基数 R。如果您在某个时候退回到常规 R(或 "regular most any programming language"),那么它就会中断。

对于原始示例,您可以将内部数字包装在 pow.bigz:

mod.bigz(pow.bigz(10,50), 3)
# 1
mod.bigz(pow.bigz(10,55),3)
# 1

对于我们在评论中讨论的更复杂的示例,即 693487563928456923569873549873658638579865348726988458,我们得到 真实 解决方案,避免通过 character class:

mod.bigz("693487563928456923569873549873658638579865348726988458",3) # should be 0
# 0
mod.bigz("100000000000000000000000000000000000000000000000000",3) # should be 1
# 1