Corretto uso di s/rand o boost :: casuale
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.
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 ().