Rand() et RAND_MAX
Résolu/Fermé
LittDev
-
16 avril 2016 à 19:09
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 juin 2016 à 13:49
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 juin 2016 à 13:49
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
16 avril 2016 à 20:22
16 avril 2016 à 20:22
Bonjour,
On ne peut pas changer la valeur de RAND_MAX.
On peut créer un nouvelle fonction pour des nombres plus grands.
On ne peut pas changer la valeur de RAND_MAX.
On peut créer un nouvelle fonction pour des nombres plus grands.
#define RAND_MAX2 ((RAND_MAX+1uLL)*(RAND_MAX+1uLL)-1) unsigned long long rndLL() { return ((unsigned long long)rnd())*(RAND_MAX+1uL) + rnd(); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 avril 2016 à 14:05
17 avril 2016 à 14:05
Bonjour,
Il suffit juste de faire une multiplication...
Tu divises par RAND_MAX et tu multiplies par la valeur max de ton choix.
Exemple :
Oui, il y a d'autres alternatives à rand(time(NULL)).
Qu'est-ce qu'il te fait dire que ça n'est plus "aléatoire" ?
Cdlt,
Il suffit juste de faire une multiplication...
Tu divises par RAND_MAX et tu multiplies par la valeur max de ton choix.
Exemple :
unsigned long long alea(const unsigned long long max) { return (unsigned long long)((double)rand()/RAND_MAX*max); }
Oui, il y a d'autres alternatives à rand(time(NULL)).
Qu'est-ce qu'il te fait dire que ça n'est plus "aléatoire" ?
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
17 avril 2016 à 23:28
17 avril 2016 à 23:28
Il ne faut pas utiliser le modulo.
Teste la solution que je t'ai donnée et dis-nous si cela te convient.
N'oublie pas aussi qu'il ne faut utiliser srand(time(NULL)) une seule fois. Donc à mettre plutôt dans le main().
Teste la solution que je t'ai donnée et dis-nous si cela te convient.
N'oublie pas aussi qu'il ne faut utiliser srand(time(NULL)) une seule fois. Donc à mettre plutôt dans le main().
16 avril 2016 à 21:02
Modifié par LittDev le 16/04/2016 à 21:32
J'ai l'impresson que la fonction n'est plus vraiment "aleatoire" on dirait
14 juin 2016 à 12:57
14 juin 2016 à 13:49