寻求支持16位以上大整数输入的高精度计算库解决方案
解决R中大整数输入与计算的问题
嘿,这个问题我之前也碰到过!其实不是gmp库不支持超过16位的整数,而是你输入的方式踩了R的一个小坑:
当你直接把20位数字作为数值传给as.bigz()时,R会先把这个数字转换成双精度浮点数存储。但双精度浮点数只能精确表示最多16-17位的十进制整数,超过的部分会被自动舍入,这就导致你的两个大整数都被转成了同一个近似值,计算结果自然为0。
正确的解决方法:用字符串传入大整数
gmp本身是完全支持任意长度大整数的,只要你把大整数以字符串形式传给as.bigz(),它就能正确解析并存储完整的数值。修改你的代码试试:
library(gmp) # 用字符串形式传入20位大整数,避免浮点数舍入 x <- as.bigz("99899999999996937503") y <- as.bigz("99899999999996936542") z <- sub.bigz(x, y) print(z) # 输出结果为 961,这才是正确的差值
其他可选的大整数库
如果确实想尝试其他库,这里有两个选项:
bit64:支持64位整数(最多约19位十进制),但对于20位的数还是不够用,适合稍小一点的大整数场景。RcppBigInts:基于C++的大整数库,同样支持任意长度,不过使用起来比gmp稍复杂一些。
不过最推荐的还是继续用gmp,只要注意用字符串输入大整数,它就能完美处理你的需求。
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

