Pregunta

Sé que este tipo de pregunta se ha hecho varias veces, pero muchas de ellas las respuestas se reducen a RTFM, pero espero si puedo hacer la pregunta correcta ... Puedo obtener una respuesta cuasi definitiva para todos los demás como Bueno, con respecto a la implementación.

Estoy tratando de generar una secuencia de números aleatorios en una de las dos formas siguientes:

#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);
 }

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

Cada vez que ejecuto la opción 1, obtengo el mismo número en cada ejecución de cada bucle. Pero diferente en cada ejecución del programa.

Cuando ejecuto la opción 2, obtengo 82 de las bibliotecas Boost, por lo que se devuelve 0.81999999999999. Podía entender si era 42, pero 82 me está dejando rascándome la cabeza incluso después de leer los documentos aleatorios Boost.

¿Algunas ideas?

DJS.

¿Fue útil?

Solución

Con la opción 2, no debe crear una nueva instancia de rng y die para cada llamada.

Tampoco estoy seguro de si entiendo el problema con la opción 1 correctamente: está llamando a srand () solo una vez, pero cada llamada a rand () le da el mismo número. Eso es inusual". Intente reducir el bucle al mínimo e imprima el valor devuelto de Rand ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top