r - R:gmp:mod.bigz 的输出不准确
问题描述
我下载了 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
解决方案
我认为我的总体建议是,当您的代码中有这些数字时,请避免在任何时候回退到基础 R。如果您在某个时候使用常规 R(或“大多数常规编程语言”),那么它就会中断。
对于原始示例,您可以将内部数字包装在pow.bigz
:
mod.bigz(pow.bigz(10,50), 3)
# 1
mod.bigz(pow.bigz(10,55),3)
# 1
对于我们在评论中讨论的更复杂的示例,即 693487563928456923569873549873658638579865348726988458,我们得到了真正的解决方案,即通过类避免使用 R 来获取数字character
:
mod.bigz("693487563928456923569873549873658638579865348726988458",3) # should be 0
# 0
mod.bigz("100000000000000000000000000000000000000000000000000",3) # should be 1
# 1
推荐阅读
- d3.js - D3 Choropleth,通过缩放/视图获取元素
- excel - 将具有 1 和 0 的 5 个单元格转换为单个数组,如 Excel 中的 {1,0,0,1,1}
- maven - 如何在 GitHub 中自动化 Maven 项目的版本控制?
- vue.js - Vue如何在视图级别自定义全局导航栏
- android - 在 Android Studio 提供的“Bluetooth Le Gatt”示例项目中触摸时列表项如何变暗
- python - discordpy 无法使用 pip 安装
- flutter - Flutter如何在BottomNavigationBar中添加边距或填充
- jquery - 带有Ul html的jquery选择器文本框
- javascript - 如何修复错误无法使用 Node.js / Express 获取
- sql-server - Microsoft SQL - 与 CROSS JOIN 斗争