首页 >web前端 >js教程 >如何在 JavaScript 中创建一致的随机数生成器?

如何在 JavaScript 中创建一致的随机数生成器?

DDD
DDD原创
2024-11-04 09:26:02601浏览

How to Create a Consistent Random Number Generator in JavaScript?

创建可种子的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn