Maison > développement back-end > C++ > Pourquoi `rand() % 14` renvoie-t-il des valeurs limitées sur le MCG d'Apple ?

Pourquoi `rand() % 14` renvoie-t-il des valeurs limitées sur le MCG d'Apple ?

Mary-Kate Olsen
Libérer: 2024-11-28 00:20:10
original
615 Les gens l'ont consulté

Why Does `rand() % 14` Return Limited Values on Apple's MCG?

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal