Maison >développement back-end >C++ >Pourquoi `rand() % 14` ne renvoie-t-il parfois que 6 ou 13 ?

Pourquoi `rand() % 14` ne renvoie-t-il parfois que 6 ou 13 ?

DDD
DDDoriginal
2024-11-25 10:34:11422parcourir

Why Does `rand() % 14` Sometimes Only Return 6 or 13?

Rand() % 14 : Découvrir le mystère des valeurs répétitives

En programmation, la fonction rand() est couramment utilisée pour générer des valeurs aléatoires. Nombres. Cependant, certains utilisateurs ont rencontré un problème intrigant où l'expression rand() % 14 ne produit systématiquement que 6 ou 13.

Pour comprendre ce comportement, examinons le fonctionnement de rand(). Il utilise l'algorithme Mersenne Congruential Generator (MCG) d'Apple, qui implique un multiplicateur spécifique. Malheureusement, ce multiplicateur est divisible par 7, ce qui entraîne un comportement erratique lors de la génération de nombres aléatoires dans une plage limitée.

Plus précisément, le premier nombre aléatoire généré après l'appel de srand() ne présentera qu'un seul bit d'entropie modulo 14. Cela signifie qu'il ne peut prendre que deux valeurs possibles : 6 ou 13.

Pour contourner ce problème, il existe une solution simple. Appelez simplement rand() plusieurs fois et supprimez les résultats pour introduire du caractère aléatoire. Cela garantit que le premier nombre aléatoire utilisé dans rand() % 14 n'est pas influencé par l'ensemencement initial.

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!

Déclaration:
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