Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4764 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Double aléatoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Double aléatoire

n°1333296
Cat Mary
Posté le 28-03-2006 à 09:09:15  profilanswer
 

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é :

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. void main ()
  4. {
  5. double a;
  6. a = 2.0*rand() - (double) RAND_MAX;
  7. }


 
Mais ça m'affiche toujours un entier négatif.

mood
Publicité
Posté le 28-03-2006 à 09:09:15  profilanswer
 

n°1333310
franceso
Posté le 28-03-2006 à 09:38:33  profilanswer
 

à 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 :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main( ) // main renvoie toujours un entier
  5. {
  6.   srand( time(NULL) );
  7.   double a = rand() / (double)RAND_MAX;
  8.   std::cout << a << 'n';
  9.   return 0;
  10. }

n°1333316
Cat Mary
Posté le 28-03-2006 à 09:50:03  profilanswer
 

Merci, mais vu que je fais en fonction de l'heure, si je fais une boucle de ce style :

Code :
  1. for(int i=0;i<20;i++)
  2. {
  3. srand( time(NULL) );
  4. a = rand() / (double)RAND_MAX;
  5. cout << a <<endl;
  6. }


ç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

n°1333372
skelter
Posté le 28-03-2006 à 10:55:15  profilanswer
 

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.

n°1333378
Cat Mary
Posté le 28-03-2006 à 11:02:59  profilanswer
 

ah oui, nickel, merci. Et dernière question, comment je fais si je veux que ça varie entre -10 et 10 par exemple

n°1333388
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:08:06  profilanswer
 

ben ça te renvoie quoi rand() ?

n°1333390
Cat Mary
Posté le 28-03-2006 à 11:09:13  profilanswer
 

des nombre entre 0 et 1

n°1333394
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:12:56  profilanswer
 

et donc pour avoir un nombre entre 0 et 10 ?

n°1333397
Cat Mary
Posté le 28-03-2006 à 11:14:23  profilanswer
 

je sais pas...

n°1333413
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:20:08  profilanswer
 

une multiplication par 10  [:pingouino] ?


Message édité par _darkalt3_ le 28-03-2006 à 11:20:34
mood
Publicité
Posté le 28-03-2006 à 11:20:08  profilanswer
 

n°1333414
Cat Mary
Posté le 28-03-2006 à 11:20:29  profilanswer
 

oups... merci

n°1333417
Cat Mary
Posté le 28-03-2006 à 11:21:51  profilanswer
 

et pour qu'il soit aléatoirement négatif ?

n°1333421
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:22:57  profilanswer
 

creuse toi la tete :o

n°1333425
nargy
Posté le 28-03-2006 à 11:25:45  profilanswer
 

> 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;

n°1333431
Cat Mary
Posté le 28-03-2006 à 11:27:23  profilanswer
 

ok, merci

n°1333433
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:27:58  profilanswer
 

Donne du poisson un jour à quelqu'un, il reviendra te demander à manger.
Apprends lui à pêcher et tu sera peinard.
 
(en gros ;) )

n°1333436
Cat Mary
Posté le 28-03-2006 à 11:28:31  profilanswer
 

exact....

n°1333437
nargy
Posté le 28-03-2006 à 11:28:40  profilanswer
 

d une manière générale:

Code :
  1. // fonction qui renvoie un nombre dans [min,max]:
  2. double randd(double min, double max)
  3. {
  4.   double r=(double)rand()/(double)RAND_MAX;
  5.   return r*(max-min)+min;
  6. }


 

n°1333438
nargy
Posté le 28-03-2006 à 11:30:22  profilanswer
 

> 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 :)

n°1333441
_darkalt3_
Proctopathe
Posté le 28-03-2006 à 11:31:30  profilanswer
 

Pour moi, la méthode générale, c'est que les gens lisent la doc déjà [:spamafote]


Message édité par _darkalt3_ le 28-03-2006 à 11:36:29
n°1333452
Cat Mary
Posté le 28-03-2006 à 11:35:48  profilanswer
 

merci beaucoup pour ton aide

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Double aléatoire

 

Sujets relatifs
Probleme de taille de structure avec char[] et doubleGénération d'un chiffre aléatoire à partir d'une loi gaussienne
Afficher un fichier portant un nom aléatoire ?[Résolu] Image aléatoire
tirage aléatoire sans remiseIncrémentation aléatoire !
Image aleatoire + lien automatique vers l'image taille réelle et .....Convertir une AnsiString en Int ou Double
Double rollover?Afficher un double
Plus de sujets relatifs à : Double aléatoire


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)