Amorçage du générateur de nombres aléatoires en JavaScript
Introduction :
Le générateur de nombres aléatoires intégré à JavaScript, Math.random() ne peut pas être explicitement généré ou manipulé. Cependant, des fonctions externes peuvent être utilisées pour fournir une fonctionnalité d'amorçage et générer des nombres aléatoires de haute qualité avec des conditions initiales spécifiques.
Réponse :
Bien que Math.random() reste non amorçable, plusieurs Des fonctions de générateur de nombres pseudo-aléatoires (PRNG) efficaces et robustes existent en JavaScript qui peuvent être générées et fournir une excellente caractère aléatoire.
Initialisation des graines :
Pour initialiser correctement les PRNG, il est crucial d'utiliser des graines à haute entropie. Une méthode efficace consiste à utiliser des fonctions de hachage telles que cyrb128, qui peuvent générer diverses valeurs de hachage de 128 bits à partir des chaînes d'entrée. Alternativement, remplir la graine avec des données factices et faire avancer le générateur peut également être utilisé, bien que cela limite le nombre d'états initiaux.
sfc32 (Simple Fast Counter) PRNG :
sfc32 est un PRNG notable qui a réussi avec succès la suite de tests de nombres aléatoires PractRand. Il fonctionne avec un état 128 bits et offre une vitesse exceptionnelle en JavaScript. Un exemple d'utilisation de sfc32 avec un générateur de graines personnalisé :
function sfc32(a, b, c, d) { return function() { a |= 0; b |= 0; c |= 0; d |= 0; let t = (a + b | 0) + d | 0; d = d + 1 | 0; a = b ^ b >>> 9; b = c + (c << 3) | 0; c = (c << 21 | c >>> 11); c = c + t | 0; return (t >>> 0) / 4294967296; } } const seedgen = () => (Math.random() * 2 ** 32) >>> 0; const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen()); for (let i = 0; i < 10; i++) console.log(getRand());
En utilisant ces techniques, les développeurs JavaScript peuvent exploiter la puissance des PRNG amorçables pour générer des nombres aléatoires de haute qualité pour diverses applications, allant de la simulation au développement de jeux. .
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!