JavaScript中在范围内生成随机大整数

4

我需要一个介于0和超过1000位的整数之间的随机整数。

使用big-integer (NPM)处理这么大的整数很容易,但没有随机方法,而且Math.random()表达的精度不足以覆盖该范围。

是否有人知道在JavaScript中生成大范围伪随机整数的巧妙方法?


1
注意,big-integer现在新增了一个randBetween方法。 - Peter Olson
4个回答

3

3
您可否详细说明如何将一组随机字节转换为一个X到Y之间(包括X和Y)的整数?这比您简短的回答所表现出来的要复杂得多。 - Adrian Seeley
1
我只能针对普通整数进行操作,但由于“big-integer”模块不支持十六进制数字,因此对于大数字来说这非常困难。 - micnic
啊,好的,这很有道理。big-integer 似乎使用整数数组作为大型基数表示来表示值,获得良好的分布将是一个比其目的更需要的算法。 - Adrian Seeley
如果模块的维护者将实现十六进制(https://github.com/peterolson/BigInteger.js/issues/6),我可以为大型随机整数实现更通用的解决方案。 - micnic
2
就更新而言(我是“big-integer”库的维护者),现在有一个“randBetween”方法,并且支持十六进制数字。 - Peter Olson

1
也许是这样的:
var crypto = require('crypto');
var biformat = require('biguint-format');

// Adjust # bytes as needed
var seed = biformat(crypto.randomBytes(8), 'dec');
bigInt(seed);

1

0
function genRandomNumber(byteCount, radix) {
  return BigInt('0x' + crypto.randomBytes(byteCount).toString('hex')).toString(radix)
}

// to genrate a 8 byte number in decimal format string
const randomNumber = genRandomNumber(8, 10)

你在 genRnadomNumber 中犯了一个错误。 - Mike Steelson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接