human
Comment une fonction de randomisation est-elle définie en programmation ? Que fait un ordinateur lorsque la fonction randomize est appelée ? S'il vous plaît, expliquez-moi comme si j'avais cinq ans.
gpt
Lorsque vous appelez une fonction aléatoire, elle appelle en fait un générateur de nombres pseudo-aléatoires, qui génère des nombres qui *semblent* aléatoires, mais qui peuvent être prédits si vous connaissez l'état interne du générateur. Un exemple courant de PRNG est le générateur congruentiel linéaire, qui prend la forme : Xn+1 = a*Xn+c mod m où a, c et m sont des constantes. Autrement dit, pour obtenir le prochain nombre "aléatoire", vous multipliez le nombre actuel par a, ajoutez c, puis calculez le reste de la division par m. M est souvent choisi comme une puissance de deux , ce qui permet de remplacer l'opération modulo par un masquage de bits , qui est beaucoup plus rapide, mais cela dégrade sérieusement le caractère aléatoire de la sortie . L'[article wikipedia] (URL_3) contient une liste d'exemples d'implémentations et les constantes qu'elles utilisent. D'autres exemples de PRNG incluent : * [ Registre à décalage à rétroaction linéaire ] ( URL_2 ) * [ Mersenne twister ] ( URL_0 ) * [ Blum Blum Shub ] ( URL_1 ) Les PRNG varient dans la qualité du caractère aléatoire qu'ils produisent - les LCG et les LFSR sont très rapides , mais produisent des nombres aléatoires de mauvaise qualité : la séquence semble aléatoire , mais des tests statistiques peuvent montrer qu'elle ne l'est pas . Pour des applications telles que la cryptographie, il est important que les nombres soient statistiquement aléatoires. Une façon d'y parvenir est d'utiliser les entrées de l'utilisateur telles que les mouvements de la souris pour randomiser une zone de mémoire appelée * pool d'entropie *, qui est ensuite introduite dans le générateur de nombres aléatoires. Sur linux, vous pouvez voir la quantité d'entropie disponible avec : cat /proc/sys/kernel/random/entropy_avail Si vous obtenez ensuite des octets aléatoires avec : cat /dev/random|hexdump et vérifiez à nouveau l'entropie disponible, vous verrez qu'il a diminué. La sortie de nombres aléatoires fournit des informations sur l'état interne du générateur. Plus l'état interne est connu, plus la séquence de nombres est prévisible, donc l'entropie est mise à jour pour refléter cela.