Maison >interface Web >js tutoriel >Comment créer un générateur de nombres aléatoires amorceables en JavaScript ?

Comment créer un générateur de nombres aléatoires amorceables en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 08:48:30856parcourir

How do I create a seedable random number generator in JavaScript?

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 :

  • nextInt() : génère un entier aléatoire compris entre 0 et (2* *31 - 1).
  • nextFloat() : génère un nombre aléatoire à virgule flottante entre 0 et 1.
  • nextRange(start, end) : génère un nombre aléatoire dans une plage spécifiée ( début inclus, fin exclusive).
  • choice(array) : Choisit un élément aléatoire dans un tableau.

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

  • Considérez les caractéristiques et les limites du RNG choisi avant de l'utiliser.
  • Utilisez les fonctions d'assistance autour du RNG pour simplifier son utilisation, comme randRange(start, end) pour générer des nombres dans une plage spécifique.
  • Référez-vous à la documentation du RNG pour plus de détails et des instructions d'utilisation.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn