首頁 >web前端 >js教程 >如何在 JavaScript 中播種隨機數產生器?

如何在 JavaScript 中播種隨機數產生器?

DDD
DDD原創
2024-11-29 17:35:12199瀏覽

How Can I Seed the Random Number Generator in JavaScript?

在JavaScript 中播種隨機數產生器

簡介:
Java 的內建隨機數產生器, Math.random() 無法明確播種或操作。然而,外部函數可用於提供播種功能並產生具有特定初始條件的高品質隨機數。

答案:
雖然Math.random() 仍然不可播種,但有幾個JavaScript 中存在高效且強大的偽隨機數產生器(PRNG) 函數,可以播種並提供出色的性能隨機性。

種子初始化:
要正確初始化 PRNG,利用高熵種子至關重要。一種有效的方法是使用像 cyrb128 這樣的雜湊函數,它可以從輸入字串產生不同的 128 位元雜湊值。或者,也可以使用虛擬資料填充種子並推進生成器,儘管它限制了初始狀態的數量。

sfc32(簡單快速計數器)PRNG:
sfc32是一個著名的 PRNG,已成功通過 PractRand 隨機數測試套件。它以 128 位元狀態運行,並在 JavaScript 中提供卓越的速度。使用sfc32 和自訂種子產生器的範例:

function sfc32(a, b, c, d) {
  return function() {
    a |= 0; b |= 0; c |= 0; d |= 0;
    let t = (a + b | 0) + d | 0;
    d = d + 1 | 0;
    a = b ^ b >>> 9;
    b = c + (c << 3) | 0;
    c = (c << 21 | c >>> 11);
    c = c + t | 0;
    return (t >>> 0) / 4294967296;
  }
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
for (let i = 0; i < 10; i++) console.log(getRand());

利用這些技術,JavaScript 開發人員可以利用可種子PRNG 的強大功能為從模擬到遊戲開發的各種應用程式產生高品質的隨機數.

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

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