Maison > développement back-end > C++ > Pourquoi `rand() % 14` génère-t-il uniquement 6 et 13 sur les plates-formes Apple ?

Pourquoi `rand() % 14` génère-t-il uniquement 6 et 13 sur les plates-formes Apple ?

Susan Sarandon
Libérer: 2024-11-26 04:53:13
original
721 Les gens l'ont consulté

Why Does `rand() % 14` Only Generate 6 and 13 on Apple Platforms?

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 :

  1. 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.
  2. 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.
  3. 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!

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