Fonction random
AleuiA
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
après plusieurs recherche sur le sujet, j'en suis arrivé a un petit problème:
j'ai bien une fonction random qui fonctionne:
int l;
int min=0;
int max=3;
srand(time(NULL));
l = (min + ((float) rand() / RAND_MAX * (max - min + 1)));
cependant, si je la met dans une boucle for:
int l;
int min=0;
int max=3;
int i;
for(i=0;i<10;i++)
{
srand(time(NULL));
l = (min + ((float) rand() / RAND_MAX * (max - min + 1)));
}
les 10 randoms qu'elle me sortira seront identiques
d'après mes infos, ce serait parce tout les randoms se font en même temps
du coup et il possible de modifier le srand(time(NULL)) a chaque passage dans la boucle ? si oui comment ?
Merci d'avance !
après plusieurs recherche sur le sujet, j'en suis arrivé a un petit problème:
j'ai bien une fonction random qui fonctionne:
int l;
int min=0;
int max=3;
srand(time(NULL));
l = (min + ((float) rand() / RAND_MAX * (max - min + 1)));
cependant, si je la met dans une boucle for:
int l;
int min=0;
int max=3;
int i;
for(i=0;i<10;i++)
{
srand(time(NULL));
l = (min + ((float) rand() / RAND_MAX * (max - min + 1)));
}
les 10 randoms qu'elle me sortira seront identiques
d'après mes infos, ce serait parce tout les randoms se font en même temps
du coup et il possible de modifier le srand(time(NULL)) a chaque passage dans la boucle ? si oui comment ?
Merci d'avance !
A voir également:
- Fonction random
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
4 réponses
pour le random il faut utiliser % pas / voici un exemple
#include <stdio.h> #include <time.h> int main(int argc, char *argv[]) { int l; srand (time (NULL)); l=(rand()%5); printf("%d",l); getchar(); return 0; } }
oui j'ai aussi essayé cette fonction qui marche mais le probleme reste le meme:
int i,l;
int main()
{
for(i=0;i<10;i++)
{
srand(time(NULL));
l = rand()%2;
printf("%d",alea);
}
}
les 10 random sont identiques ...
int i,l;
int main()
{
for(i=0;i<10;i++)
{
srand(time(NULL));
l = rand()%2;
printf("%d",alea);
}
}
les 10 random sont identiques ...
a oui effectivement ....
je demanderait a mes profs pourquoi .... interressant ... merci de t'être posé la question et d'avoir résolu mon problème !
je demanderait a mes profs pourquoi .... interressant ... merci de t'être posé la question et d'avoir résolu mon problème !
La réponse est très simple.
srand() est un générateur de nombres pseudo-aléatoires. On met le seed en argument et on obtiendra via rand les différents nombres du générateur qui respecte l'équiprobabilité entre 0 et RAND_MAX. Si tu refais à chaque boucle srand, tu utiliseras un autre générateur ce qui ne te donnera aucune garantie. De plus la boucle est tellement rapide que time(NULL) te donnera la même valeur et donc la graine n'aura pas changé.
Il faut retenir qu'on initialise qu'une et une seule fois le générateur.
Cdlt
srand() est un générateur de nombres pseudo-aléatoires. On met le seed en argument et on obtiendra via rand les différents nombres du générateur qui respecte l'équiprobabilité entre 0 et RAND_MAX. Si tu refais à chaque boucle srand, tu utiliseras un autre générateur ce qui ne te donnera aucune garantie. De plus la boucle est tellement rapide que time(NULL) te donnera la même valeur et donc la graine n'aura pas changé.
Il faut retenir qu'on initialise qu'une et une seule fois le générateur.
Cdlt
C'est le contraire. Le modulo fonctionne mais ne respecte pas l'équiprobabilité puisque se bas sur les bits faibles.