Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich in JavaScript eine wiederholbare Folge von Zufallszahlen erstellen?

Wie kann ich in JavaScript eine wiederholbare Folge von Zufallszahlen erstellen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 06:50:01856Durchsuche

How can I create a repeatable sequence of random numbers in JavaScript?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn