Double aléatoire - C++ - Programmation
Marsh Posté le 28-03-2006 à 09:38:33
à chaque fois que tu appelles rand(), ça te renvoie un nombre qui semble tiré alatoirement, mais qui en fait est généré à partir du nombre renvoyé par le précedent appel de rand(). (rand fonctionne sur le principe d'une suite pseudo-aléatoire)
finalement, toute ta suite de nombre pseudo-aléatoires retournée par les appels successifs de rand() est entièrement déterminée par le premier terme de la suite (la graine), qui est par défaut initialisé à 1. C'est pour ça que tu obtiens toujours le même résultat.
tu peux utiliser srand() pour choisir la graine et lui donner une valeur différente à chaque exécution. un moyen classique de faire est d'initialiser la graine avec l'heure d'exécution du programme, comme ça deux exécutions successives (à plus d'une seconde d'intervalle) ne donneront pas les mêmes résultats.
finalement, pour générer un double entre 0 et 1, ça donne quelque chose comme ça:
Code :
|
Marsh Posté le 28-03-2006 à 09:50:03
Merci, mais vu que je fais en fonction de l'heure, si je fais une boucle de ce style :
Code :
|
ça me renvoie toujours le même, normal vu que c'est la même heure, c'est bien ça ?
Mais moi je veux me servir de ce double pour remplir une matrice et là le problème c'est que ma matrice sera rempli d'un même nombre, et moi je les veux différents
Marsh Posté le 28-03-2006 à 10:55:15
srand sert à initialiser la graine (un compteur utilisé par rand), si tu l'initialises à chaque tour de boucle avec un temps relatif en seconde (qui à de forte chance d'etre le meme d'une itération à l'autre) l'appel de rand te retournera le meme nombre.
faut mettre le srand à l'exterieur de la boucle, ou meme au début du programme.
Marsh Posté le 28-03-2006 à 11:02:59
ah oui, nickel, merci. Et dernière question, comment je fais si je veux que ça varie entre -10 et 10 par exemple
Marsh Posté le 28-03-2006 à 11:20:08
une multiplication par 10 ?
Marsh Posté le 28-03-2006 à 11:25:45
> ben ça te renvoie quoi rand() ?
> des nombre entre 0 et 1
mouais... entre 0 et RAND_MAX plutot...
donc pour un nombre de [0 à 1]:
double r=(double)rand()/(double)RAND_MAX;
0 <= r <= 1
0 <= r*20 <= 20
-10 <= r*20-10 <= 10
donc:
double r10=r*20-10;
Marsh Posté le 28-03-2006 à 11:27:58
Donne du poisson un jour à quelqu'un, il reviendra te demander à manger.
Apprends lui à pêcher et tu sera peinard.
(en gros )
Marsh Posté le 28-03-2006 à 11:28:40
d une manière générale:
Code :
|
Marsh Posté le 28-03-2006 à 11:30:22
> Donne du poisson un jour à quelqu'un, il reviendra te demander à manger.
Apprends lui à pêcher et tu sera peinard.
Je lui donne la méthode générale. Plus besoin de pêcher
Marsh Posté le 28-03-2006 à 11:31:30
Pour moi, la méthode générale, c'est que les gens lisent la doc déjà
Marsh Posté le 28-03-2006 à 09:09:15
Bonjour à tous,
Je vous arrête desuite, j'ai déjà lu le topic parlant des nombre aléatoire en c++, mais, étant débutante, j'ai pas trop compri.
Je souhaiterai générer un double aléatoirement, j'ai essayé :
Mais ça m'affiche toujours un entier négatif.