Lors de la génération de nombres aléatoires dans PHP, deux fonctions communes sont LCG_VALUE () et MT_RAND () . Ils peuvent tous être utilisés pour générer des nombres aléatoires, mais ils ont leurs avantages et leurs inconvénients dans des scénarios d'utilisation spécifiques, des performances, des aléances et une portabilité. Cet article comparera ces deux fonctions en détail pour aider les développeurs à choisir des schémas de génération de nombres aléatoires appropriés en fonction de leurs besoins.
LCG_VALUE ()
Il s'agit d'une fonction de génération de nombres aléatoires implémentée dans PHP basée sur le générateur congruent linéaire (LCG, générateur congruentiel linéaire). Il renvoie un numéro de point flottant entre 0 et 1, qui est généralement utilisé dans des scénarios où des nombres aléatoires à point flottant sont nécessaires.
mt_rand ()
Fonction de génération de nombres aléatoires de Mersenne Twister intégrée PHP. Il génère des entiers, avec la plage par défaut de 0 à mt_getrandMax () , qui a généralement de meilleures performances et un aléatoire fort.
fonction | Type de retour | Plage par défaut | illustrer |
---|---|---|---|
LCG_VALUE () | Flotter | 0,0 ≤ x <1,0 | Convient aux scénarios où des nombres aléatoires décimaux sont nécessaires |
mt_rand () | Entier (int) | 0 à mt_getrandmax () | Gammes personnalisables adaptées à la génération entière aléatoire |
D'une manière générale, mt_rand () fonctionne mieux que LCG_Value () en raison de l'optimisation des algorithmes. Dans un scénario où un grand nombre de génération de nombres aléatoires est généré, mt_rand () peut effectuer la tâche plus rapidement.
L'algorithme mt_rand () est basé sur Mersenne Twister, avec une période allant jusqu'à 2 ^ 19937-1 et est généré rapidement.
LCG_VALUE () est basé sur un algorithme congruente linéaire, avec une courte période et une vitesse plus lente.
Random
L'algorithme Mersenne Twister a un meilleur aléatoire et convient aux jeux, à la simulation et aux besoins aléatoires généraux.
Le générateur congruent linéaire a une mauvaise aléatoire, et il y a des problèmes de courtes périodes et de distribution inégale.
Sécurité <br> Aucun des deux ne convient aux occasions cryptographiquement sécurisées.
Il est recommandé d'utiliser des fonctions plus sûres telles que random_int () ou random_bytes () dans PHP 7 et supérieur.
<?php
// Générer un0et1Nombres de points flottants entre
$randomFloat = lcg_value();
echo "Numéro de point flottant aléatoire: " . $randomFloat;
?>
<?php
// Générer un0et100Entier entre
$randomInt = mt_rand(0, 100);
echo "Entiers aléatoires: " . $randomInt;
?>
Scène | Fonctions recommandées | illustrer |
---|---|---|
Nécessite des nombres aléatoires de points flottants | LCG_VALUE () | Génération de nombres de points flottants simples, adaptés à des scénarios tels que le calcul de probabilité |
Besoin de nombres aléatoires entiers haute performance | mt_rand () | La plupart des jeux, des simulations et des exigences aléatoires ordinaires sont préférées |
Des nombres aléatoires sécurisés cryptographiquement sont nécessaires | PHP 7+ Fonctions de sécurité intégrées | Utilisez random_int () ou random_bytes () |
Pour plus d'informations sur les fonctions de nombres aléatoires PHP, veuillez vous référer à la documentation officielle: https://gitbox.net/manual/en/fonction.lcg-value.php et https://gitbox.net/manual/en/fonction.mt-rand.php