La fonction random ne renvoit que des valeurs faibles

Résolu
Jeepeedee -  
ElementW Messages postés 5690 Statut Contributeur -
Bonjour,

J'essaie d'utiliser la fonction random() en C++ pour récupérer une valeur comprise entre 0 et 550 000 (le nombre de mots de mon dictionnaire).
Problème : elle me renvoie systématiquement des valeurs faibles (< 20 000 en général). J'ai donc écrit un petit programme pour vérifier, je n'arrive pas à obtenir de valeur aléatoire > 100 000 même au bout de 10 000 000 itérations !
Où est le problème ?

#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{
srand(time(0));

int nbAleatoire(0);
int i(0);
int nbTest(0);
string continuer = "O";
do
{

cout << "Nombre d'iterations : " << endl;
cin >> nbTest;
while(i<nbTest)
{
nbAleatoire = rand() % 550000;
if(nbAleatoire > 100000)
{
cout << nbAleatoire << endl;
break;
}
i++;
}
cout << "
Voulez-vous essayer encore ? (O/N)" << endl;
cin >> continuer;
}while(continuer=="O");
return 0;
}


2 réponses

  1. Utilisateur anonyme
     
    Bonjour

    As-tu lu la doc de la fonction rand() dans le manuel C++ ?
    Elle te renvoie un entier compris entre 0 et RAND_MAX
    Voir
    http://www.cplusplus.com/reference/cstdlib/rand/
    et
    https://openclassrooms.com/courses/l-aleatoire-en-c-et-c-se-servir-de-rand-1
    Affiche la valeur de RAND_MAX de ton compilateur, et tu comprendras pourquoi tu n'as jamais plus de 100000, et peut-être même jamais plus de 32767.
    0
  2. Jeepeedee
     
    Je m'en suis rendu compte un peu tard : un int ne pouvait pas prendre une telle valeur ! Merci pour le lien vers la fonction, je ne connaissais pas le manuel C++ !!!
    0
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      100 000 est parfaitement représentable par un
      int
      sur 99% des plate-formes. Pour peu qu'il fasse 32 bits, tu peux monter jusqu'à 2 147 483 647.

      Par ailleurs, il n'y a pas de "manuel C++"; uniquement les standards ISO C++ et les sites de documentation. Au passage, cplusplus.com est peu mis à jour, incomplet et imprécis, il est préférable d'utiliser cppreference.com.
      0