Générer un nombre aléatoire... - C - Programmation
Marsh Posté le 23-11-2003 à 01:27:59
1/ rand()%(taLimiteMax)
2/ parce que c'est du pseudo aleatoire. initialise avec srand et le tps courant
Marsh Posté le 23-11-2003 à 01:31:12
chrisbk >
putain, je croyais que tout ça été compris maintemant
http://www.isty-info.uvsq.fr/~rume [...] 4.html#q_9
en début de programme
srand(time(NULL));
Marsh Posté le 23-11-2003 à 01:33:22
il ne faut jamais utiliser rand() avec un simple modulo, parce que ça revient quasiment à ne prendre en compte que les bits de poids faibles, donc déjà que rand() est pas terrible, là c'est un massacre
Marsh Posté le 23-11-2003 à 01:36:31
fut un temps ou j'avais un dans ma signature une source .c démontrant la meilleure qualité de cette méthode et comment générer proprement des nombres aléatoires avec ça
Marsh Posté le 23-11-2003 à 01:48:30
Taz a écrit : chrisbk > |
super ce lien... plein de choses utiles
Marsh Posté le 23-11-2003 à 11:01:13
Taz a écrit : il ne faut jamais utiliser rand() avec un simple modulo, parce que ça revient quasiment à ne prendre en compte que les bits de poids faibles, donc déjà que rand() est pas terrible, là c'est un massacre |
Enfin quand même, c'était vrai il y a des années ça mais maintenant, les libc se sont mise à jour avec de meilleurs generateurs aléatoires non ?
Marsh Posté le 23-11-2003 à 11:13:34
En tout cas, quand je fais "man 3 rand" ils disent que c'est bon avec ma libc
Sinon, il reste toujours la solution assez simple qui consiste à remplacer le generateur aléatoire par un autre vraiment performant.
Marsh Posté le 23-11-2003 à 14:58:29
ok ... mais j'ai le problème suivant : il me sort que le même nombre :
Code :
|
Résultat :
Code :
|
Marsh Posté le 23-11-2003 à 15:02:16
ben tu réinitialises à chaque fois donc tu obtiens la meme séquence. comme time renvoie un nombre de seconde et que la boucle est rapide, tu as exactement la même chose
voir mon premier message
Marsh Posté le 23-11-2003 à 15:08:00
Taz a écrit : ben tu réinitialises à chaque fois donc tu obtiens la meme séquence. comme time renvoie un nombre de seconde et que la boucle est rapide, tu as exactement la même chose |
j'ai fait une boucle pour i =0 juska 10000000. L'execution dure 10s... et il me sort : 6 6 6 6 6 6 6 6 ....
Marsh Posté le 23-11-2003 à 15:14:14
excuse moi, mais je comprends pas.
En java c'est bien moins compliqué.
Comment je dois faire alors. J'ai bien lu ton lien... mais .....
Marsh Posté le 23-11-2003 à 15:14:46
ReplyMarsh Posté le 23-11-2003 à 15:15:57
Taz a écrit : faut te le dire comment ? |
comme ca :
TU NOUS FOUS CE FOUTU PUTAIN DE SRAND JUSTE UNE SEULE PUTAIN DE FOIS EN DEBUT DE PROGRAMME ET APRES T'Y TOUCHES PU ET ON EN PARLE PU §§§§!
Marsh Posté le 23-11-2003 à 15:35:57
oulà, prendre très peu de nombres sur un généréteur, c'est casse-gueule, voir http://www-cs-faculty.stanford.edu [...] 2.html#rng pour la précision.
algo corrigé :
http://www-cs-faculty.stanford.edu [...] rams/rng.c
Marsh Posté le 23-11-2003 à 15:42:12
Code :
|
j'aime bien cette fonction (ici appelé mult), elle a une bonne réparition, c'est bien de l'utiliser dans un table de hashage, elle permet de contourner le problème du modulo
Marsh Posté le 23-11-2003 à 16:21:09
greeeg a écrit : Bonsoir, |
|
Marsh Posté le 28-06-2004 à 18:49:15
euh, question conne : la fonction standard C rand () et random ()
renvoient un int.
Et si je veux un nombre compris entre 0 et 1 ([0,1[) comme en Java, c koi cette fonction qui fais ca en C ?
Marsh Posté le 28-06-2004 à 18:58:33
Giz a écrit : euh, question conne : la fonction standard C rand () et random () |
(1. / rand()) ?
Marsh Posté le 28-06-2004 à 19:03:52
R3g a écrit : (1. / rand()) ? |
hum...ca n'a pas l'air trop bete ca , c'est la methode generalement utilisee ?
Marsh Posté le 28-06-2004 à 19:36:30
R3g a écrit : (1. / rand()) ? |
hum... spa bien finalement : cela revient a appliquer une fonction 1/x => la repartition des valeurs n'est pas lineaire
Autre solution
Marsh Posté le 29-06-2004 à 02:31:11
Ben si tu veux du linéaire, rand() / RAND_MAX... C'est en cinquième qu'on fait les fonctions affines, non ?
Marsh Posté le 23-11-2003 à 01:26:18
Bonsoir,
j'ai juste un petit problème avec la fonction qui permet de choisir un nombre aléatoirement.
En effet si je fais
int_variable = rand();
Il me sort une valeur au bol, mais j'aimerais pouvoir lui donner les 2 bornes : choisir un nombre, au bol, entre 0 et 7 p.ex.
De plus, il me sort toujours la même valeur (41) même si je recompile tout le fichier.... pourquoi ?
1000 Mercis