Question

Je sais que ce genre de question a été posé plusieurs fois, mais beaucoup d'entre eux se réduisent à RTFM, mais j'espère que si je peux poser la bonne question ... Je peux obtenir une réponse quasi-définitive pour tout le monde car Eh bien, concernant la mise en œuvre.

J'essaie de générer une séquence de nombres aléatoires de 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 j'exécute l'option 1, j'obtiens le même numéro sur chaque exécution de chaque boucle. Mais différent sur chaque série du programme.

Lorsque j'exécute l'option 2, j'obtiens 82 des bibliothèques Boost, donc 0.81999999999999 est renvoyé. 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 boost.

Des idées?

DJS.

Était-ce utile?

La solution

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

Je ne sais pas non plus si je comprends correctement le problème avec l'option 1: vous n'appelez SRAND () qu'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 imprimez la valeur renvoyée de Rand ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top