代码之家  ›  专栏  ›  技术社区  ›  dasf

r:gmp:mod.bigz输出不准确

  •  1
  • dasf  · 技术社区  · 6 年前

    我下载了gmp包来计算非常大的数的模幂。但它的功能之一, mod.bigz ,似乎超过了一定的位数。例如,100…00 mod 3的答案应该是1,因为99…99可以被3整除。但我得到的答案有时是0或2。有什么办法可以解决这个问题吗?或者对于非常大的数字来说,药品生产质量管理规范是不准确的吗?

    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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Hack-R    6 年前

    我认为我的总体建议是,在代码中包含这些数字的任何时候,都不要返回到基数r。如果您在某个时刻回到常规R(或“常规大多数编程语言”),那么它就会中断。

    对于原始示例,您可以将内部编号包装在 pow.bigz 以下内容:

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

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

    mod.bigz("693487563928456923569873549873658638579865348726988458",3) # should be 0
    # 0
    mod.bigz("100000000000000000000000000000000000000000000000000",3) # should be 1
    # 1 
    
    推荐文章