Le générateur Rand() % 14 renvoie des valeurs limitées
Dans un programme récent, un développeur a rencontré un problème où le rand() % 14 L'expression produisait systématiquement des valeurs de seulement 6 ou 13. Malgré les tentatives d'exécution du code à plusieurs reprises, les résultats sont restés cohérents. Le problème réside dans la nature du générateur de nombres aléatoires utilisé par le MCG d'Apple.
Comme expliqué par Wikipédia, le multiplicateur de 16807 du MCG est divisible par 7. Cela signifie que le premier nombre aléatoire généré après srand() sera n'ont qu'un seul bit d'entropie lorsqu'ils sont pris modulo 14, ce qui entraîne une plage de valeurs limitée. Cette lacune est attribuée au générateur de nombres aléatoires de mauvaise qualité utilisé par Apple.
Une solution simple à ce problème consiste à invoquer rand() plusieurs fois après srand() et à ignorer les résultats initiaux. Cela améliorera l'entropie des nombres générés et résoudra le problème de la production de valeur limitée.
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!