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

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

DDD
DDDoriginal
2024-11-04 09:26:02605parcourir

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>

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>

Accéder à des nombres entiers aléatoires :

<code class="javascript">for (var i = 0; i < 10; i++)
  console.log(rng.nextInt());</code>

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>

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>

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>

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
Article précédent:Proxy - Défis JavaScriptArticle suivant:Proxy - Défis JavaScript