2009-11-11 11 views
0

Je sais que ce genre de question a été posée à quelques reprises, mais beaucoup d'entre elles se résument à RTFM, mais j'espère que je peux poser la bonne question. Je peux obtenir une réponse quasi-définitive pour tous les autres, concernant la mise en œuvre.Utilisation correcte de s/rand ou Boost :: random

Je suis en train de générer une séquence de nombres aléatoires dans l'une des deux manières suivantes:

#include <cstdlib> 
#include <ctime> 
#include <cmath> 

#include "Cluster.h" 
#include "LatLng.h" 

srand((unsigned)time(0)); 
double heightRand; 
double widthRand; 
for (int p = 0; p < this->totalNumCluster; p++) { 

    Option 1. 
    heightRand = myRand(); 
    widthRand = myRand(); 

    Option 2. 
    heightRand = ((rand()%100)/100.0); 
    widthRand = ((rand()%100)/100.0); 

    LatLng startingPoint(0, heightRand, widthRand); 
    Cluster tempCluster(&startingPoint); 
    clusterStore.insert(clusterStore.begin() + p, tempCluster); 
} 

Où Myrand() est:

#include <boost/random.hpp> 

double myRand() 
{ 
boost::mt19937 rng; 
boost::uniform_int<> six(1,100); 

boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, six); 

int tempDie = die(); 
double temp = tempDie/100.0; 

return temp; 
} 

Chaque fois que je lance l'option 1, Je reçois le même numéro à chaque exécution de chaque boucle. Mais différent sur chaque course du programme.

Lorsque j'exécute l'option 2, j'obtiens 82 des bibliothèques boost, donc 0.81999999999999 est retourné. Je pourrais comprendre si c'était 42, mais 82 me laisse me gratter la tête même après avoir lu les documents aléatoires de poussée.

Des idées?

DJS.

+0

L'option 2 exécute rand() qui est une bibliothèque C - où est Boost ici. (et où voyez-vous 82 - retour de myRand? – Mark

Répondre

3

Avec l'option 2, vous ne devez pas créer une nouvelle instance de rng et die pour chaque appel.

Je ne suis pas sûr de comprendre correctement le problème avec l'option 1: vous appelez srand() une seule fois, mais chaque appel à rand() vous donne le même numéro? C'est .. "inhabituel". Essayez de réduire la boucle au minimum et d'imprimer la valeur renvoyée par rand().