Implementierung eines speicherbaren JavaScript-Zufallszahlengenerators
Es ist eine häufige Anforderung, eine Folge von Zufallszahlen in JavaScript zu generieren, aber die eingebauten In der Funktion Math.random() fehlt die Möglichkeit, einen bestimmten Startwert festzulegen. Dies kann problematisch sein, wenn wir eine bestimmte Zahlenfolge reproduzieren oder deterministische Zufälligkeit erzeugen möchten.
Verwendung eines benutzerdefinierten Zufallszahlengenerators
Um diese Einschränkung zu überwinden, können wir Implementieren Sie einen benutzerdefinierten Zufallszahlengenerator, der es uns ermöglicht, einen Startwert anzugeben. Hier ist ein Beispiel mit einem linearen Kongruentialgenerator (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>
Dieser LCG erzeugt eine Folge von ganzen Zahlen zwischen 0 und (2**31 - 1). Andere Arten von Zufallszahlengeneratoren, wie z. B. Mersenne Twister, bieten stärkere Zufälligkeitsgarantien, sind jedoch komplexer zu implementieren.
Einen Startwert festlegen
So legen Sie einen Startwert fest , können wir es als Argument an den RNG-Konstruktor übergeben:
<code class="js">var rng = new RNG(20);</code>
Dadurch wird der interne Zustand des Generators mit dem angegebenen Startwert initialisiert und sichergestellt, dass er eine wiederholbare Zahlenfolge erzeugt.
Verwendung des Zufallszahlengenerators
Der benutzerdefinierte RNG bietet die folgenden Methoden:
Um beispielsweise eine Folge von Zufallszahlen zwischen 10 und 50 zu generieren:
<code class="js">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50));</code>
Zusätzliche Überlegungen
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen setzfähigen Zufallszahlengenerator in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!