wilvart
Messages postés47Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention13 décembre 2012
-
1 juin 2012 à 17:20
darkbatcher
Messages postés5Date d'inscriptionlundi 18 octobre 2010StatutMembreDernière intervention15 juin 2012
-
14 juin 2012 à 23:49
Salut tout le monde !
J'ai besoin de votre aide pour un problème avec les nombres aléatoires.
J'ai codé un algo simpliste (suffisant pour mon projet) de limite centrale. Dans celui-ci je génère 12 nombres aléatoires que j'additionne ect...
Mon problème est le suivant, lorsque j'exécute mon script (python swig), j'appel ma fonction C++ qui génère toujours la même séquence aléatoire.
En me renseignant, j'ai plus ou moins compris que le problème venait du fait que mon traitement se fait en moins d'une seconde, donc démarre de la même seed à chaque fois...
Je m'embrouille et je sais plus quoi faire, des idées?
PS: Mes include sont bon, etc...
...
res=0
ioMean=0
ioStddev=0
tmpM=0
i = 1
while i < 500:
seed = (i==1)
res = centralLimit.execute(175, 20, seed)
tmpM = ioMean
ioMean += (res - tmpM) / i
ioStddev += (res - tmpM) * (res - ioMean)
i += 1
print ioMean
ioStddev = sqrt(ioStddev/(500-1))
print ioStddev
...
class CentralLimitAlgorithm : public AbstractAlgorithm
{
public:
static int execute (int mean, int stddev);
private:
};
int CentralLimitAlgorithm::execute (int mean, int stddev)
{
srand(time(NULL));
double res = 0;
for (int i=0; i<12; i++)
{
res += ((double) rand() / (RAND_MAX));
}
res -= 6;
res /= 6;
float sigma= res * stddev ;
res += mean + sigma;
return res;
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 1 juin 2012 à 18:22
Bonjour.
Oui c'est normal. Ton seed étant toujours le même (si tu exécute en moins d'une seconde), tu auras toujours la même séquence. Il te faut utiliser un autre algorithme de génération de nombre aléatoire.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
darkbatcher
Messages postés5Date d'inscriptionlundi 18 octobre 2010StatutMembreDernière intervention15 juin 2012 14 juin 2012 à 23:49
Hello !
Effectivement comme l'a dit CptPingu, c'est normal puisque tu démarre de la même seed.
Cela dit, il parait plus intelligent de n'appeler srand() qu'une seule fois, srand() est réservée à l'initialisation de la suite. Après rand utilise comme seed le dernier nombre aléatoire produit.