Maison >développement back-end >C++ >Pourquoi `rand() % 14` ne renvoie-t-il parfois que 6 ou 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!