6
votes

rand ()% 4000000000UL ne donnant que de petites valeurs

J'ai une question sur le code suivant:

10989
13493
13169
18581
17972
29


0 commentaires

4 Réponses :


9
votes

rand () ne génère que des chiffres jusqu'à son rand_max.

selon msdn , sur Windows Rand_max n'est que 32767, ou (2 ** 15 - 1) (Notez qu'il s'agit de la norme RAND_MAX minimale autorisée (ici lien vers Open Group Base Spec , qui est basé sur la standard C)).

Si vous voulez des chiffres plus importants, vous devez l'appeler plus de fois et de bitShift, par exemple: xxx

( exemple sur CODEPAD ).


0 commentaires

5
votes

Le comportement que vous rencontrez est due aux valeurs de rand_max sur les deux systèmes que vous testez.

sur le Système Windows 7 , Rand_max est 32767, une valeur significativement plus petite que n'importe quel environnement CodpePad exécute votre code. Pour ce fait, les valeurs générées de manière aléatoire sont dans une plage significativement plus petite.


0 commentaires

4
votes

Windows utilise un générateur de nombres aléatoires comportant une valeur maximale de 32767. Voir la valeur pour rand_max.

Vous pouvez créer un plus grand nombre aléatoire en collant la sortie de deux appels RAND (). P>

big_rand = rand() << 15 | rand();


0 commentaires

2
votes

Les résultats de RAND sont en fonction de la mise en œuvre et garantissent seulement 32767:

http://fr.cppreference.com/w/cpp/numeric/ Random / rand_max

Ainsi, lorsque vous exécutez votre code sur différents systèmes avec différentes implémentations de bibliothèque, vous pouvez obtenir différents résultats - Windows ne renvoie que des numéros allant jusqu'à 32767, de sorte que vous obtenez de petits numéros de votre code.


0 commentaires