Rand() et RAND_MAX

Résolu
LittDev -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    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
    1. LittDev
       
      OK merci alors
      0
    2. LittDev
       
      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
    3. AlfheimOnline
       
      Qu'est ce que tu veut dire par "1uLL" et "1uL" dalfab stp ?
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      ULL pour unsigned long long.
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. LittDev
       
      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
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    3. LittDev
       
      Problème réglé, merci
      0