Amorçage du générateur de nombres aléatoires en JavaScript
Introduction :
Math.random de JavaScript( ), tout en offrant un caractère aléatoire, ne permet pas l'amorçage. Cela signifie que chaque fois que la fonction est invoquée, elle génère une nouvelle séquence de nombres, ce qui peut être problématique dans les situations où des séquences aléatoires répétables sont souhaitées.
Générateurs de nombres pseudo-aléatoires amorceables :
Étant donné que Math.random() ne dispose pas de capacités d'amorçage, il est nécessaire d'implémenter des générateurs de nombres pseudo-aléatoires (PRNG) externes qui offrent l'amorçage. fonctionnalité. Les PRNG fournissent des nombres aléatoires de haute qualité et permettent une initialisation avec une ou plusieurs valeurs de départ.
Initialisation des semences :
Les PRNG nécessitent une initialisation appropriée pour garantir le caractère aléatoire. Des valeurs de départ bien distribuées et à haute entropie sont cruciales pour un caractère aléatoire robuste. Les fonctions de hachage, telles que cyrb128, peuvent générer des graines appropriées à partir de chaînes courtes. Alternativement, des données factices peuvent être utilisées comme remplissage avec plusieurs itérations du générateur pour mélanger soigneusement l'état initial.
Considérations relatives aux performances :
Les nombres JavaScript ne prennent en charge que jusqu'à 53 bits. résolution pour les entiers entiers et résolution de 32 bits pour les opérations au niveau du bit. Les PRNG modernes utilisent souvent des opérations 64 bits, mais des cales sont nécessaires pour la mise en œuvre de JS, ce qui peut réduire considérablement les performances. Les algorithmes PRNG présentés donnent la priorité aux opérations 32 bits pour des performances optimales en JavaScript.
PRNG recommandés :
sfc32 (Simple Fast Counter)
sfc32 est un PRNG rapide avec un état interne de 128 bits qui excelle en JavaScript. Il présente une excellente qualité aléatoire et est couramment utilisé dans la suite de tests de nombres aléatoires PractRand.
Exemple d'utilisation :
function sfc32(a, b, c, d) { return function() { // State update logic ... return (t >>> 0) / 4294967296; // Convert to floating-point number in the range [0, 1) }; } const seedgen = () => (Math.random() * 2 ** 32) >>> 0; const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
Notez que l'exemple utilise une génération de graines simple méthode à des fins de démonstration. Dans la pratique, des mécanismes de génération de semences plus robustes devraient être utilisés.
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!