建立可種子的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中文網其他相關文章!