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
Salut

Pour le besion d'un programme, j'ai besion de générer un nombre > à RAND_MAX, comment je dois faire pour changer sa valeur ? Ou est que je devrais plutôt créer une nouvelle fonction rand() ????

Merci

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
Bonjour,

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();
}
0
OK merci alors
0
Y a il une autre altérnative à srand(time(NULL)) ?

J'ai l'impresson que la fonction n'est plus vraiment "aleatoire" on dirait
0
AlfheimOnline
14 juin 2016 à 12:57
Qu'est ce que tu veut dire par "1uLL" et "1uL" dalfab stp ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
14 juin 2016 à 13:49
ULL pour unsigned long long.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
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 :
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,
0
Salut

randLL()%max

Justement, max est tellement grand que, à chaque fois que je lance le programme, je remarque qu'il ne fait qu'augmenter un petit peu (suivant le temps)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
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().
0
Problème réglé, merci
0