Rand() % 14 ne génère que les valeurs 6 ou 13 : briser le mystère
Le problème auquel vous êtes confronté survient en raison de l'inhérent limitations dans l'implémentation de la fonction rand() sur les plateformes Apple, comme expliqué dans la réponse que vous avez fournie. Avec les paramètres par défaut, le générateur de nombres aléatoires utilisé par rand() produit une séquence qui a une entropie limitée lorsqu'elle est divisée par 14, la faisant alterner entre seulement deux valeurs, 6 et 13.
Pour remédier à ce problème, vous pouvez suivre les étapes suivantes :
-
Appeler Rand() plusieurs fois après Srand() : comme suggéré dans la réponse, supprimez le premiers résultats générés par rand() après avoir appelé srand(time(NULL)). Ce faisant, vous éliminez le cycle initial qui ne produit que 6 et 13.
-
Utilisez un autre générateur de nombres aléatoires : Si la méthode ci-dessus ne résout pas le problème, envisagez de passer à un autre générateur de nombres aléatoires. générateur de nombres aléatoires qui offre une meilleure entropie, comme le Mersenne Twister. Vous pouvez trouver d'autres générateurs de nombres aléatoires dans les bibliothèques C ou dans des implémentations distinctes.
-
Modifier la plage de nombres aléatoires : comme vous l'avez mentionné dans la modification, changer la plage de rand() à 13 ou 15 lui permet de fonctionner correctement. En effet, un multiplicateur de 15 (par exemple 752574) et 13 (par exemple 220379) ne sont pas divisibles par leurs restes respectifs. Cependant, modifier la plage peut ne pas convenir à votre cas d'utilisation spécifique, surtout si vous avez besoin d'un nombre aléatoire compris entre 0 et 13.
En résolvant le problème sous-jacent du générateur de nombres aléatoires sur les plateformes Apple, vous pouvez vous assurer que rand() % 14 produit une séquence de valeurs plus uniformément répartie entre 0 et 13.
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!