Au lieu d'utiliser rand()%2
essayez. rand()>(RAND_MAX/2)
. Vous ne pouvez que supposer rand()
pour être uniforme sur l'intervalle [0, RAND_MAX]
.
Edita: C'est ce qu'a suggéré Shahbaz dans les commentaires, ce que je n'ai remarqué qu'après avoir posté cette réponse.
Edita: ArjunShankar m'a appelé sur ma précédente formulation : "rand() est seulement spécifié pour être uniforme sur l'intervalle [0, RAND_MAX]"
De la norme C99 :
La fonction rand calcule une séquence d'entiers pseudo-aléatoires dans la plage de 0 à RAND_MAX.
Techniquement, l'uniformité (ou equidistribué ) n'est pas spécifié, mais c'est la norme de facto utilisée pour les implémentations des PRNG les plus courants (par exemple Mersenne Twister). Ceci afin de permettre à un programmeur de créer facilement un PRNG personnalisé avec une distribution non uniforme. Sans cette propriété, un programmeur est obligé d'implémenter un PRNG personnalisé à partir de zéro.