创建可种子的 JavaScript 随机数生成器
JavaScript 中的 Math.random() 函数自动提供 0 到 1 之间的随机数根据当前时间初始化。但是,需要一个随机数生成器,允许用户定义的种子值生成可重复的伪随机数序列。
解决方案:
实现可播种随机数生成器涉及选择支持播种的合适伪随机数生成器 (PRNG) 算法。一种流行的选择是 Mersenne Twister 算法,以其出色的随机性和长周期而闻名。
但是,实现 Mersenne Twister 可能很复杂。对于初学者,建议使用线性同余发生器 (LCG) 等替代方案。 LCG 实现起来很简单,并且提供了不错的随机性,尽管它们不如 Mersenne Twister 强大。
LCG 实现(RNG 类)
以下代码段演示了 LCG使用 GCC 常量在 JavaScript 中实现:
<code class="javascript">function RNG(seed) { this.m = 0x80000000; // 2**31; this.a = 1103515245; this.c = 12345; this.state = seed ? seed : Math.floor(Math.random() * (this.m - 1)); } RNG.prototype.nextInt = function() { this.state = (this.a * this.state + this.c) % this.m; return this.state; }</code>
用法:
使用所需种子值创建 RNG 类的实例:
<code class="javascript">var rng = new RNG(20);</code>
访问随机整数:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextInt());</code>
生成随机浮点数(0 到 1):
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextFloat());</code>
生成指定范围内的随机值:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); // Random integers between 10 (inclusive) and 50 (exclusive)</code>
从数组中选择随机元素:
<code class="javascript">var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits)); // Random digits from the array</code>
以上是如何在 JavaScript 中创建一致的随机数生成器?的详细内容。更多信息请关注PHP中文网其他相关文章!