在 JavaScript 中播种随机数生成器
简介:
JavaScript 的内置随机数生成器, Math.random() 无法显式播种或操作。然而,外部函数可用于提供播种功能并生成具有特定初始条件的高质量随机数。
答案:
虽然 Math.random() 仍然不可播种,但有几个JavaScript 中存在高效且强大的伪随机数生成器 (PRNG) 函数,可以播种并提供出色的性能随机性。
种子初始化:
要正确初始化 PRNG,利用高熵种子至关重要。一种有效的方法是使用像 cyrb128 这样的哈希函数,它可以从输入字符串生成不同的 128 位哈希值。或者,也可以使用虚拟数据填充种子并推进生成器,尽管它限制了初始状态的数量。
sfc32(简单快速计数器)PRNG:
sfc32是一个著名的 PRNG,已成功通过 PractRand 随机数测试套件。它以 128 位状态运行,并在 JavaScript 中提供卓越的速度。使用 sfc32 和自定义种子生成器的示例:
function sfc32(a, b, c, d) { return function() { a |= 0; b |= 0; c |= 0; d |= 0; let t = (a + b | 0) + d | 0; d = d + 1 | 0; a = b ^ b >>> 9; b = c + (c << 3) | 0; c = (c << 21 | c >>> 11); c = c + t | 0; return (t >>> 0) / 4294967296; } } const seedgen = () => (Math.random() * 2 ** 32) >>> 0; const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen()); for (let i = 0; i < 10; i++) console.log(getRand());
利用这些技术,JavaScript 开发人员可以利用可种子 PRNG 的强大功能为从模拟到游戏开发的各种应用程序生成高质量的随机数.
以上是如何在 JavaScript 中播种随机数生成器?的详细内容。更多信息请关注PHP中文网其他相关文章!