Aléatoire de nombres fractionnaires php. Génère un nombre aléatoire

Techniquement, le terme « générateur de nombres aléatoires » n’a aucun sens, puisque les nombres eux-mêmes ne sont pas aléatoires. Par exemple, 100 est-il un nombre aléatoire ? Et 25 ? Ce terme signifie réellement qu’il crée une séquence de nombres qui apparaissent de manière aléatoire. Cela soulève une question plus difficile : qu’est-ce qu’une séquence de nombres aléatoires ? La seule bonne réponse : une séquence de nombres aléatoires est une séquence dans laquelle tous les éléments ne sont pas liés. Cette définition conduit au paradoxe selon lequel toute séquence peut être aléatoire ou non aléatoire, selon la manière dont la séquence est obtenue. Par exemple, la chaîne de nombres suivante
1 2 3 4 5 6 7 8 9 0
a été obtenue en tapant la ligne supérieure du clavier dans l'ordre, la séquence ne peut donc pas être considérée comme générée de manière aléatoire. Mais que se passerait-il si vous obteniez la même séquence lorsque vous retiriez les balles de tennis numérotées du canon ? Dans ce cas, il s’agit déjà d’une séquence générée aléatoirement. Cet exemple montre que le caractère aléatoire d’une séquence dépend de la manière dont elle a été obtenue, et non de la séquence elle-même.

N'oubliez pas qu'une séquence de nombres générée par ordinateur est déterministe : chaque nombre, à l'exception du premier, dépend des nombres qui le précèdent. Techniquement, cela signifie que seule une séquence quasi aléatoire de nombres peut être générée par un ordinateur, c'est-à-dire en fait, ils ne sont pas vraiment aléatoires. Cependant, cela est suffisant pour la plupart des tâches et, par souci de simplicité, de telles séquences seront appelées aléatoires. Une méthode très intéressante a été développée par John von Neumann ; on l'appelle souvent la racine carrée moyenne. Dans cette méthode, le nombre aléatoire précédent est mis au carré, puis les chiffres du milieu sont extraits du résultat. Par exemple, si vous créez des nombres à trois chiffres et que le nombre précédent était 121, alors le mettre au carré donne le résultat 14641. Isoler les trois chiffres du milieu donne le nombre aléatoire suivant 464. L'inconvénient de cette méthode est qu'elle a un très courte période de répétition, appelée cycle. Pour cette raison cette méthode pas utilisé aujourd'hui. Les méthodes modernes de génération de nombres aléatoires sont beaucoup plus complexes.

Nombres aléatoires en PHP

PHP dispose de deux groupes de fonctions pour travailler avec des nombres aléatoires. Purement extérieurement, ils se distinguent par le préfixe mt_ pour toutes les fonctions d'un des groupes.

Fonctionnalités obsolètes
fonction rand. Renvoie un entier compris entre zéro et la valeur de RAND_MAX (qui est 32 767). Peut avoir deux paramètres entiers facultatifs - s'ils sont spécifiés, un nombre aléatoire est généré du premier paramètre au second.

Echorand(); écho rand(1 100); // Donne un nombre aléatoire de 1 à 100

Fonction srand. Spécifie la séquence de nombres aléatoires produite par la fonction rand. A tout un paramètre - quand différentes significations Avec ce paramètre, rand produira différentes séquences de nombres. La fonction srand ne doit être appelée qu'une seule fois avant tous les appels à la fonction rand. Exemple d'utilisation :

Sand(1288); // Initialise le générateur de nombres aléatoires pour ($i=0; $i= 3.0.6, PHP 4, PHP 5)

Description:

Int mt_getrandmax (vide)

Affiche la valeur maximale pouvant être renvoyée par mt_rand()

mt_rand()

Génère la meilleure valeur aléatoire (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Description:

int mt_rand()

De nombreuses anciennes versions de générateurs de nombres aléatoires ont des caractéristiques douteuses et sont lentes. Par défaut, PHP utilise la fonction rand() pour générer des nombres aléatoires. La fonction mt_rand() est un bon remplacement. Il utilise un générateur de nombres aléatoires 4 fois plus rapide que rand() et utilise Mersenne Twister.

Appelée sans les arguments facultatifs min et max, mt_rand() renvoie une valeur pseudo-aléatoire comprise entre 0 et RAND_MAX. Si vous avez besoin d'obtenir, par exemple, des valeurs aléatoires comprises entre 5 et 15 inclus, recherchez mt_rand (5, 15).

Exemple d'utilisation de mt_rand()

Le résultat de l'exécution cet exemple il y aura quelque chose comme ça :

1604716014
1478613278
6

Commentaire

Remarque : Dans les versions antérieures à 3.0.7, le deuxième paramètre de la fonction spécifiait la plage de nombres. Par exemple, pour obtenir des nombres aléatoires entre 5 et 15 dans ces versions vous devez spécifier la fonction mt_rand(5, 11).

mt_srand()

Installations valeur initiale meilleur générateur de nombres aléatoires (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Description:

Annuler mt_srand()

Définit la valeur initiale du générateur de nombres aléatoires à l'aide de seed. Depuis PHP 4.2.0, la graine est facultative et les paramètres par défaut pour les valeurs aléatoires sont omis.

Exemple d'utilisation de mt_srand()

Remarque : Depuis PHP 4.2.0, il n'est plus nécessaire d'initialiser le générateur de nombres aléatoires avec srand() ou mt_srand(), puisque cela se fait désormais automatiquement.

Tâche
Vous devez générer un nombre aléatoire dans une plage numérique.

Solution
La fonction mt_rand() est conçue pour cela :

// nombre aléatoire entre $upper et $lower, inclus
$random_number = mt_rand($inférieur, $supérieur);

Discussion
La génération de nombres aléatoires est utile lorsque vous devez afficher une image aléatoire à l'écran, attribuer aléatoirement un point de départ dans un jeu, sélectionner une entrée aléatoire dans une base de données ou générer des nombres aléatoires. identifiant unique séances. Afin de générer un nombre aléatoire dans l'intervalle entre deux points, vous devez passer deux arguments à la fonction mt_rand() :

$numéro_aléatoire = mt_rand(1, 100);

L'appel de mt_rand() sans argument renvoie un nombre compris entre zéro et le nombre aléatoire maximum renvoyé par mt_getrandmax(). Il est difficile pour un ordinateur de générer un nombre véritablement aléatoire. Il est bien meilleur pour suivre les instructions méthodiquement et n'est pas aussi bon s'il doit agir spontanément. Si vous devez forcer un ordinateur à produire un nombre aléatoire, vous devez alors lui donner un certain ensemble de commandes répétables, et le fait même de la répétabilité rend l'obtention du caractère aléatoire moins probable.

PHP dispose de deux générateurs de nombres aléatoires différents : la fonction classique appelée rand() et plus encore fonction parfaite mt_rand().

MT (Mersenne Twister) est un générateur de nombres pseudo-aléatoires nommé d'après le moine et mathématicien français Marin Mersenne, qui a étudié les nombres premiers. L'algorithme de ce générateur est basé sur ces nombres premiers. La fonction mt_rand() est plus rapide que la fonction rand() et produit plus de nombres aléatoires, nous préférons donc la première.

Si vous disposez d'une version de PHP antérieure à 4.2, alors avant d'appeler la fonction mt_rand() (ou rand()) pour la première fois, vous devez initialiser le générateur avec une valeur initiale en appelant la fonction mt_srand() (ou srand( )) fonction. La valeur initiale est le nombre que fonction aléatoire l'utilise comme base pour générer les nombres aléatoires qu'il renvoie ; il fait référence à une manière de résoudre le dilemme mentionné ci-dessus – répétabilité versus caractère aléatoire.

Comme valeur initiale qui change très rapidement et avec une faible probabilité de répétabilité (ces propriétés doivent être caractérisées par une bonne valeur initiale), vous pouvez prendre la valeur renvoyée par la fonction temporelle de haute précision microtime(). Il suffit d'initialiser le générateur une fois. PHP 4.2 et versions ultérieures gèrent automatiquement l'initialisation, mais si la valeur initiale est définie manuellement avant le premier appel à mt_rand(), PHP ne la remplace pas par sa propre valeur initiale.

Si vous devez sélectionner un enregistrement aléatoire dans une base de données, le moyen le plus simple consiste d'abord à déterminer le nombre total de champs dans la table, à sélectionner un nombre aléatoire dans cette plage, puis à interroger cette ligne dans la base de données :

$sth = $dbh->query("SELECT COUNT(*) AS count FROM quotes");
si ($ligne = $sth->fetchRow()) (
$count = $ligne ;
) autre (
mourir ($row->getMessage());
}
$ aléatoire = mt_rand (0, $ count - 1);
$sth = $dbh->query("SELECT quote FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
imprimer $row .

"\n" ;
}

Cet extrait de code détermine le nombre total de lignes dans la table, génère un nombre aléatoire à partir de cette plage, puis utilise LIMIT $random,1 pour SELECT une ligne de la table en commençant à la position $random. Dans MySQL version 3.23 ou supérieure, une option alternative est possible :

$sth = $dbh->query("SELECT quote FROM quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
imprimer $row . "\n" ;
}

Dans ce cas, MySQL randomise d'abord les lignes, puis renvoie la première ligne.

Salut tout le monde! Dans cet article, nous examinerons les nouveautés en matière de génération de nombres aléatoires dans PHP 7.1.

Cette mise à jour est devenue invisible pour les développeurs, mais a amélioré le langage Programmation PHP dans le domaine de la génération de nombres aléatoires.

Pour autant que nous le sachions, en PHP nous pouvons utiliser la fonction rand(min, max) pour générer des nombres aléatoires :

Échorand(7, 17);

Si vous actualisez maintenant la page, vous recevrez à chaque fois un nouveau nombre aléatoire.

Mais tout n’est pas aussi simple qu’il y paraît. Le fait est qu'en fonction de la raison pour laquelle vous générez le nombre aléatoire, la fonction rand() utilise différents systèmes de génération. Ceux. cela dépend du système dans lequel il est utilisé. Certains systèmes peuvent utiliser des méthodes de génération faibles, vous recevrez donc des nombres qui ne sont pas complètement aléatoires.

Dans PHP 7.1, ce problème a été résolu et la fonction mt_rand() a été ajoutée :

Écho mt_rand(7, 17);

Cette fonctionnalité fonctionne beaucoup mieux, y compris en matière de sécurité. Ce qu'il est également important de savoir, c'est que si vous utilisez la fonction rand() dans PHP 7.1, elle sera automatiquement écrasée par mt_rand() . Ceux. rand() n'est plus qu'un alias pour mt_rand() .

De nombreuses autres fonctions permettant de générer des résultats aléatoires ont été améliorées dans PHP 7.1. Par exemple, regardons comment obtenir une valeur aléatoire à partir d’un tableau :

$names = ["Ivan", "Alexandre", "Vasiliy"];
echo $noms;

Ceux. toutes les fonctions comme celle-ci ont été améliorées pour produire de meilleurs nombres aléatoires dans PHP 7.1. Oui, cette mise à jour est passée inaperçue, mais quelle que soit la langue dans laquelle vous écrivez, il est très important de comprendre ce qui se passe à l’intérieur d’une fonction et comment elle se comporte.

mob_info