Implémentation d'un générateur de nombres aléatoires JavaScript amorçables
Il est courant de générer une séquence de nombres aléatoires en JavaScript, mais le dans Math.random(), la fonction n'a pas la possibilité de définir une graine spécifique. Cela peut être problématique lorsque nous voulons reproduire une séquence particulière de nombres ou créer un caractère aléatoire déterministe.
Utilisation d'un générateur de nombres aléatoires personnalisé
Pour surmonter cette limitation, nous pouvons implémentez un générateur de nombres aléatoires personnalisé qui nous permet de spécifier une valeur de départ. Voici un exemple utilisant un générateur congruentiel linéaire (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>
Ce LCG produit une séquence d'entiers compris entre 0 et (2**31 - 1). D'autres types de générateurs de nombres aléatoires, tels que Mersenne Twister, offrent des garanties aléatoires plus fortes mais sont plus complexes à mettre en œuvre.
Définition d'une valeur de départ
Pour définir une valeur de départ , nous pouvons le transmettre comme argument au constructeur RNG :
<code class="js">var rng = new RNG(20);</code>
Cela initialisera l'état interne du générateur avec la graine spécifiée, garantissant qu'il produit une séquence de nombres répétables.
Utilisation du générateur de nombres aléatoires
Le RNG personnalisé fournit les méthodes suivantes :
Par exemple, pour générer une séquence de nombres aléatoires entre 10 et 50 :
<code class="js">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50));</code>
Considérations supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!