La fonction random ne renvoit que des valeurs faibles
Résolu
Jeepeedee
-
ElementW Messages postés 5690 Statut Contributeur -
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 ?
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;
}
A voir également:
- La fonction random ne renvoit que des valeurs faibles
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Signal faible ou inexistant tv que faire ? - Guide
- Fonction remplacer sur word - Guide
2 réponses
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.
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.
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++ !!!
100 000 est parfaitement représentable par un
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.
intsur 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.