Domanda

So che questo tipo di domanda è stata posta alcune volte, ma molte di loro risposte si riducono a RTFM, ma spero che se posso porre la domanda giusta ... posso ottenere una risposta quasi definitiva per tutti gli altri come Bene, per quanto riguarda l'implementazione.

Sto cercando di generare una sequenza di numeri casuali in uno dei due modi seguenti:

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

Dove è myrand ():

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

Ogni volta che eseguo l'opzione 1, ottengo lo stesso numero su ogni esecuzione di ogni ciclo. Ma diverso su ogni esecuzione del programma.

Quando eseguo l'opzione 2, ricevo 82 dalle librerie Boost, quindi viene restituito 0,8199999999999. Potrei capire se fosse 42, ma 82 mi sta lasciando a grattarmi la testa anche dopo aver letto i documenti casuali boost.

Qualche idea?

DJ.

È stato utile?

Soluzione

Con l'opzione 2, non dovresti creare una nuova istanza di rng e die per ogni chiamata.

Inoltre, non sono sicuro di capire correttamente il problema con l'opzione 1: stai chiamando srand () solo una volta, ma ogni chiamata a Rand () ti dà lo stesso numero? Questo è .. "insolito". Cerca di ridurre il ciclo al minimo e stampare il valore restituito da Rand ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top