我下载了gmp软件包,以便计算非常大的数的模幂。但是它的功能之一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
答案 0 :(得分:1)
我认为我的总体建议是,当代码中包含这些数字时,请避免在任何时候退回到基数R。如果您在某个时候使用常规R(或“常规大多数编程语言”),则会中断。
对于原始示例,您可以将内部数字包装在pow.bigz
中:
mod.bigz(pow.bigz(10,50), 3)
# 1
mod.bigz(pow.bigz(10,55),3)
# 1
对于我们在注释中讨论的更复杂的示例,即693487563928456923569873549873658638579865348726988458,我们得到了 real 解决方案,该解决方案是避免通过character
类返回数字的R:
mod.bigz("693487563928456923569873549873658638579865348726988458",3) # should be 0
# 0
mod.bigz("100000000000000000000000000000000000000000000000000",3) # should be 1
# 1