如何基于大幂数生成整数序列?R语言实现遇阻求助
生成大整数序列的正确方法
问题根源
- 直接用
(2^128):(2^128+3000)失败:2^128超出了R普通浮点数的精确表示范围,得到的是近似值,无法生成准确的整数序列。 as.bigz(2^128)的问题:先计算2^128为浮点数时已丢失精度,转bigz也无法恢复;且:操作符不支持bigz对象,因此触发警告。
正确实现步骤
用gmp库的精确大整数运算功能,避免浮点数精度损失:
- 加载gmp库
library(gmp)
- 精确计算起始和结束值
用pow.bigz()直接生成精确的2^128,再计算结束值:
start <- pow.bigz(2, 128) end <- start + 3000
- 生成整数序列
两种可靠方式:
- 方式一:用
seq()(gmp库重载了该方法,支持bigz类型)
num_sequence <- seq(start, end, by = 1)
- 方式二:通过起始值加上0到3000的整数序列构造
num_sequence <- start + as.bigz(0:3000)
两种方式都能生成从2^128到2^128+3000的精确整数序列,不会出现精度丢失或警告问题。
内容的提问来源于stack exchange,提问作者Pasdenom
相关产品推荐
相关产品推荐

