La fonction random ne renvoit que des valeurs faibles

Résolu/Fermé
Jeepeedee - Modifié par Jeepeedee le 14/07/2016 à 22:35
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 15 juil. 2016 à 19:17
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

Utilisateur anonyme
14 juil. 2016 à 22:54
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
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
15 juil. 2016 à 19:17
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