首页 > web前端 > js教程 > 如何在 JavaScript 中生成可重复的随机数?

如何在 JavaScript 中生成可重复的随机数?

DDD
发布: 2024-12-11 09:31:09
原创
308 人浏览过

How Can I Generate Repeatable Random Numbers in JavaScript?

在 JavaScript 中播种随机数生成器

简介:

JavaScript 的 Math.random( ) 函数虽然提供随机性,但不允许播种。这意味着每次调用该函数时,它都会生成一个新的数字序列,这对于需要可重复随机序列的情况可能会出现问题。

可种子伪随机数生成器:

由于 Math.random() 缺乏播种功能,因此有必要实现外部伪随机数生成器 (PRNG)提供播种功能。 PRNG 提供高质量的随机数,并允许使用一个或多个种子值进行初始化。

种子初始化:

PRNG 需要正确的初始化以确保随机性。分布良好的高熵种子值对于稳健的随机性至关重要。哈希函数(例如 cyrb128)可以从短字符串生成合适的种子。或者,可以使用虚拟数据作为多次生成器迭代的填充,以彻底混合初始状态。

性能注意事项:

JavaScript 数字仅支持最多 53 位整数分辨率和按位运算的 32 位分辨率。现代 PRNG 通常使用 64 位运算,但 JS 实现需要垫片,这会大大降低性能。所提出的 PRNG 算法优先考虑 32 位操作,以在 JavaScript 中实现最佳性能。

推荐的 PRNG:

sfc32(简单快速计数器)

sfc32 是一个快速 PRNG,具有 128 位内部状态,擅长 JavaScript。它表现出出色的随机性质量,常用于 PractRand 随机数测试套件。

示例用法:

function sfc32(a, b, c, d) {
  return function() {
    // State update logic
    ...
    return (t >>> 0) / 4294967296;  // Convert to floating-point number in the range [0, 1)
  };
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
登录后复制

请注意,该示例使用简单的种子生成方法用于演示目的。在实践中,应该采用更强大的种子生成机制。

以上是如何在 JavaScript 中生成可重复的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板