Rand() et RAND_MAX

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

      J'ai l'impresson que la fonction n'est plus vraiment "aleatoire" on dirait
    3. Qu'est ce que tu veut dire par "1uLL" et "1uL" dalfab stp ?
    4. Contributeur
      ULL pour unsigned long long.
  2. Contributeur
    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,
    1. 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)
    2. Contributeur
      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().
    3. Problème réglé, merci