首頁  >  文章  >  web前端  >  如何在 JavaScript 中建立可種子隨機數產生器?

如何在 JavaScript 中建立可種子隨機數產生器?

Barbara Streisand
Barbara Streisand原創
2024-11-04 08:48:30785瀏覽

How do I create a seedable random number generator in JavaScript?

實作可種子的JavaScript 隨機數產生器

在JavaScript 中產生隨機數序列是一個常見的要求,但是內建的Math .random() 函數缺乏設定特定種子的能力。當我們想要重現特定的數字序列或創建確定性隨機性時,這可能會出現問題。

使用自訂隨機數產生器

要克服此限制,我們可以實作一個自訂隨機數產生器,它允許我們指定種子值。以下是使用線性同餘產生器 (LCG) 的範例:

<code class="js">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>

此 LCG 產生 0 到 (2**31 - 1) 之間的整數序列。其他類型的隨機數產生器,例如 Mersenne Twister,提供更強的隨機性保證,但實現起來更複雜。

設定種子值

設定種子值,我們可以將其作為參數傳遞給RNG 建構子:

<code class="js">var rng = new RNG(20);</code>

這將使用指定的種子初始化生成器的內部狀態,確保它產生可重複的數字序列。

使用隨機數產生器

自訂RNG 提供以下方法:

  • nextInt():產生0 到(2* 之間的隨機整數*31 - 1).
  • nextFloat():產生0 到1 之間的隨機浮點數。
  • nextRange(start, end):產生指定範圍內的隨機數(
  • choice(array):從陣列中選擇一個隨機元素。

例如,產生10 到50 之間的隨機數序列:

<code class="js">for (var i = 0; i < 10; i++)
  console.log(rng.nextRange(10, 50));</code>

其他注意事項

  • 在使用所選RNG 之前考慮其特徵和局限性。 🎜>

以上是如何在 JavaScript 中建立可種子隨機數產生器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn