如何调整整数的数值精度

How to adjust the numerical precision for integers

我正在尝试在 R 中使用大数字,在我看来它们甚至没有那么大。我让 R return 我将 6001532020609003100 除以 97 的模块,我得到了答案 1;在 Python 中进行相同的计算时,我得到了答案 66。

谁能告诉我这是怎么回事?

library(Rmpfr)
as.integer(mpfr("6001532020609003100") %% 97)

[1] 66

R 没有 Python 那种“神奇”的任意长度整数:它的基本整数类型是 32 位,最大为 .Machine$integer.max == 2147483647 . 当遇到大于这个值的数字时,R 自动将其转换为双精度浮点数;然后 %% 运算符被浮点不精确弄乱了。 (如果你试图通过输入 6001532020609003100L 来坚持输入是整数(L 表示整数)R 仍然会将其转换为浮点数,但会警告你...)

@JonSpring 是正确的,您可以使用 Rmpfr 进行完全任意长度的整数计算(取决于您计算机的内存容量),但您可以 还使用 bit64 包来表示 64 位整数,您的示例 just 适合:

library(bit64)
x <- as.integer64("6001532020609003100")
x %% 97
## [1] 66

但是将此值加倍会使您超出整数 64 范围:2*x 会产生溢出错误。

老实说,如果你想做很多大整数计算,我会说 Python 更方便......