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

  FORUM HardWare.fr
  Programmation
  C++

  random en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

random en C++

n°1111201
Aldarek
Posté le 07-06-2005 à 15:07:13  profilanswer
 

Pourquoi lorsque j'utilise une de ces deux méthodes :  

Code :
  1. /*int essai1=0;
  2. essai1=(rand()%100);
  3. cout<<essai1<<endl;*/
  4. nb=(rand()%100)+1;
  5. cout<<nb<<endl;


 
Il me sort toujours le même nombre? Je sais qu'il y a une histoire de nombres pseudos aléatoires, et comment faire pour avoir un nombre différent à chaque fois??
 
Merci d'avance :jap:

mood
Publicité
Posté le 07-06-2005 à 15:07:13  profilanswer
 

n°1111237
push
/dev/random
Posté le 07-06-2005 à 15:15:01  profilanswer
 
n°1111246
Aldarek
Posté le 07-06-2005 à 15:18:16  profilanswer
 

j'ai déjà cherché sur ce topic, il me met qu'il connait pas random, je dois inclure quelle bibliothèque?
 
Merci

n°1111247
deather2
Posté le 07-06-2005 à 15:18:35  profilanswer
 

faut initialiser le seed avec srand(). Combine le avec la fonction time() pour avoir un seed totalement aleatoire.

n°1111249
deather2
Posté le 07-06-2005 à 15:19:11  profilanswer
 

Aldarek a écrit :

j'ai déjà cherché sur ce topic, il me met qu'il connait pas random, je dois inclure quelle bibliothèque?
 
Merci


Citation :


SYNOPSIS
       #include <stdlib.h>
 
       int rand(void);
 
       int rand_r(unsigned int *seedp);
 
       void srand(unsigned int seed);


;)

n°1111254
push
/dev/random
Posté le 07-06-2005 à 15:20:46  profilanswer
 

Aldarek a écrit :

j'ai déjà cherché sur ce topic


bein suffit pas de chercher, faut lire aussi

n°1112284
Aldarek
Posté le 08-06-2005 à 10:39:26  profilanswer
 

J'ai remarqué quelque chose avec ce bout de code  

Code :
  1. srand ( time(NULL) );
  2. int nb_aleatoire;
  3. nb_aleatoire=(rand()%100)+1;
  4. cout<<nb_aleatoire<<endl;


 
C'est que le nombre aléatoire va toujours croissant, jusqu'à arriver à 100 pour ensuite repartire de 1 ou un autre nombre et croitre encore. En gros, il ne décroit jamais.
 
Auriez vous une solution à ce problème? Merci :jap:

n°1112314
Taz
bisounours-codeur
Posté le 08-06-2005 à 10:56:30  profilanswer
 
n°1112320
Joel F
Real men use unique_ptr
Posté le 08-06-2005 à 11:01:17  profilanswer
 

[:pingouino]
 


madruk:~/Documents/dev/rand admin$ ./rand.test  
comparaison entre my_bad_rand et my_better_rand
nombre d'iterations (bigger is better) : 10000000
my_bad_rand moyenne : 0.358548
my_better_rand moyenne : 0.699694
my_bad_rand gagne !!! (plus aleatoire)


 
sur PPC G5 Mac OS X 10.4 gcc 3.4
 
des explications ? ca m'etonnes :|

n°1112347
nathan_g
Posté le 08-06-2005 à 11:17:17  profilanswer
 

Déja, c'est une très mauvaise idée de générer des nombres aléatoires entre 1 et 100 (compris) en utilisant l'instruction " rand()%100)+1 ". Cela a déja été dit plusieurs fois sur ce forum.
 
Mathématiquement ce que tu me dis m'étonne. En plus, je viens de faire tourner ton programme et je n'ai pas ce comportement !

mood
Publicité
Posté le 08-06-2005 à 11:17:17  profilanswer
 

n°1112531
shikra
life is short,drink faster!!!
Posté le 08-06-2005 à 12:44:50  profilanswer
 

fe un  
 

Code :
  1. srandom (getpid ());


 
puis
 

Code :
  1. 1 + (random () % 99));


 
ca devrai marcher
en tout cas ca marche bien chez moi

n°1112532
shikra
life is short,drink faster!!!
Posté le 08-06-2005 à 12:45:23  profilanswer
 

euh enleve les 1. g c pas ce que ca fout la

n°1112597
Elmoricq
Modérateur
Posté le 08-06-2005 à 13:26:26  profilanswer
 

shikra a écrit :

euh enleve les 1. g c pas ce que ca fout la


 
srandom() et random() sont des fonctions POSIX, ce qui signifie qu'elles ne sont pas forcément présentes sur tous les systèmes.
Contrairement à srand() et rand().

n°1112656
Aldarek
Posté le 08-06-2005 à 14:09:20  profilanswer
 

Oui parce que quand je met random, il me dit qu'il connais pas...

n°1112826
shikra
life is short,drink faster!!!
Posté le 08-06-2005 à 16:03:57  profilanswer
 

fait avec rand alor

n°1113206
Taz
bisounours-codeur
Posté le 08-06-2005 à 20:57:47  profilanswer
 

Joel F a écrit :

[:pingouino]
 


madruk:~/Documents/dev/rand admin$ ./rand.test  
comparaison entre my_bad_rand et my_better_rand
nombre d'iterations (bigger is better) : 10000000
my_bad_rand moyenne : 0.358548
my_better_rand moyenne : 0.699694
my_bad_rand gagne !!! (plus aleatoire)


 
sur PPC G5 Mac OS X 10.4 gcc 3.4
 
des explications ? ca m'etonnes :|

t'as essayé avec une grosse valeur pour N ?

n°1113208
Taz
bisounours-codeur
Posté le 08-06-2005 à 21:01:44  profilanswer
 

merde moi aussi. réfléchissons

n°1113210
Taz
bisounours-codeur
Posté le 08-06-2005 à 21:07:17  profilanswer
 

déjà, en mettant N pas une puissance de 2, les deux méthodes donnes de bien meilleurs résultats. après, my_better_rand gagne quand même la plus part du temps.

n°1113212
Joel F
Real men use unique_ptr
Posté le 08-06-2005 à 21:09:21  profilanswer
 

ok :) :jap:

n°1113214
Joel F
Real men use unique_ptr
Posté le 08-06-2005 à 21:09:53  profilanswer
 

et pourquoi pas boost::random ?? C'est mauvais ?

n°1113216
Taz
bisounours-codeur
Posté le 08-06-2005 à 21:14:37  profilanswer
 

y a un truc qui m'échappe. pour calculer la moyenne, je fais
 
somme( valeurs ) / (N * len(valeurs))
 
comment ça se fait que se truc soit pas toujours compris entre 0 et 1 ? y a peut etre tout simplement un problème d'overflow.  
 
testons en python (qui a des bigint)
 

Code :
  1. >>> import random
  2. >>> def bad(n): return random.randint(0, 2**16) % n
  3. ...
  4. >>> def better(n): return float(random.randint(0, 2**16)) / (1.0 + 2**16) * n
  5. ...
  6. >>> import operator
  7. >>> reduce(operator.add, [ bad(1983) for i in range(10000) ]) / (10000.0 * 1983.0)
  8. 0.49778804841149771
  9. >>> reduce(operator.add, [ better(1983) for i in range(10000) ]) / (10000.0 * 1983.0)
  10. 0.49930709980621529


 
better gagne

n°1113217
Taz
bisounours-codeur
Posté le 08-06-2005 à 21:16:18  profilanswer
 

enfin y pas tellement de différence que ça remarque. cela dit, avec N une puissance de 2, la différence est plus flagrante.

mood
Publicité
Posté le   profilanswer
 


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

  random en C++

 

Sujets relatifs
random background image[proba] Comparaison de 2 random
Comment marche la fonction Randomrandom double
pointer_to_unary_function, random_shuffle & gcc 3.3[Java] java.util.Random pas si random que ça :(
random_suffle?[C++] random_shuffle donne toujours les memes combinaisons...
[C++] random_shuffle ne randomize pas[java] un random avec une valeur int
Plus de sujets relatifs à : random en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR