Heim > Artikel > Web-Frontend > Wie kann ich in JavaScript eine wiederholbare Folge von Zufallszahlen erstellen?
Bereitstellung eines benutzerdefinierten Startwerts für den JavaScript-Zufallszahlengenerator
Die standardmäßige JavaScript-Funktion Math.random() generiert Zufallswerte im Bereich [0 , 1], es ist jedoch nicht möglich, einen benutzerdefinierten Startwert festzulegen. Folglich ist die generierte Folge von Zufallszahlen nicht wiederholbar.
Um einen JavaScript-Zufallszahlengenerator mit einem anpassbaren Startwert zu erstellen, können wir mehrere Optionen erkunden:
Math.random( ) Hilfsfunktionen:
Wenn Sie kein benutzerdefiniertes Seeding benötigen, können Sie Math.random() mit Hilfsfunktionen verwenden, um einen wiederholbaren Wertebereich zu erstellen (z. B. randRange(start, end)) .
Pseudozufallszahlengeneratoren (PRNGs):
Für mehr Kontrolle über die Zufälligkeit sollten Sie PRNGs wie den Mersenne Twister verwenden. Allerdings ist die Umsetzung komplex. Eine Alternative ist ein Linear Congruential Generator (LCG), der einfacher zu implementieren ist und eine angemessene Zufälligkeit bietet.
LCG-Implementierung (Short Seedable RNG):
Unten finden Sie eine Beispielimplementierung eines kurzen setzbaren RNG mit 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; }; RNG.prototype.nextFloat = function() { // returns in range [0,1] return this.nextInt() / (this.m - 1); }; RNG.prototype.nextRange = function(start, end) { // returns in range [start, end): including start, excluding end // can't modulu nextInt because of weak randomness in lower bits var rangeSize = end - start; var randomUnder1 = this.nextInt() / this.m; return start + Math.floor(randomUnder1 * rangeSize); }; RNG.prototype.choice = function(array) { return array[this.nextRange(0, array.length)]; };</code>
So verwenden Sie den RNG:
<code class="js">var rng = new RNG(20); for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits));</code>
Das obige ist der detaillierte Inhalt vonWie kann ich in JavaScript eine wiederholbare Folge von Zufallszahlen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!