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

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

DDD
Libérer: 2024-11-04 09:26:02
original
554 Les gens l'ont consulté

How to Create a Consistent Random Number Generator in JavaScript?

Création d'un générateur de nombres aléatoires JavaScript amorçables

La fonction Math.random() en JavaScript fournit automatiquement un nombre aléatoire entre 0 et 1 initialisé en fonction de l’heure actuelle. Cependant, il existe un besoin pour un générateur de nombres aléatoires qui permette aux valeurs de départ définies par l'utilisateur de produire des séquences répétables de nombres pseudo-aléatoires.

Solution :

Mise en œuvre un générateur de nombres aléatoires amorçables implique de choisir un algorithme de générateur de nombres pseudo-aléatoires (PRNG) approprié qui prend en charge l'amorçage. Une option populaire est l'algorithme Mersenne Twister, connu pour son excellent caractère aléatoire et sa longue période.

Cependant, la mise en œuvre de Mersenne Twister peut être complexe. Pour les débutants, une alternative comme un générateur congruentiel linéaire (LCG) est recommandée. Les LCG sont simples à mettre en œuvre et offrent un caractère aléatoire décent, bien qu'ils ne soient pas aussi puissants que Mersenne Twister.

Implémentation LCG (classe RNG)

L'extrait suivant démontre une LCG implémentation en JavaScript à l'aide des constantes de GCC :

<code class="javascript">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

Utilisation :

Créer une instance de la classe RNG avec une valeur de départ souhaitée :

<code class="javascript">var rng = new RNG(20);</code>
Copier après la connexion

Accéder à des nombres entiers aléatoires :

<code class="javascript">for (var i = 0; i < 10; i++)
  console.log(rng.nextInt());</code>
Copier après la connexion

Générer des nombres aléatoires à virgule flottante (0 à 1) :

<code class="javascript">for (var i = 0; i < 10; i++)
  console.log(rng.nextFloat());</code>
Copier après la connexion

Générer des valeurs aléatoires dans une plage spécifiée :

<code class="javascript">for (var i = 0; i < 10; i++)
  console.log(rng.nextRange(10, 50)); // Random integers between 10 (inclusive) and 50 (exclusive)</code>
Copier après la connexion

Sélectionnez des éléments aléatoires dans un tableau :

<code class="javascript">var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
for (var i = 0; i < 10; i++)
  console.log(rng.choice(digits)); // Random digits from the array</code>
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal