Maison > interface Web > js tutoriel > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-04 08:48:30
original
786 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal