Pergunta

Eu sei que esse tipo de pergunta já foi feito algumas vezes, mas muitas delas respostas se resumem ao RTFM, mas espero que eu possa fazer a pergunta certa ... posso obter uma resposta quase definitiva para todos os outros como como Bem, em relação à implementação.

Estou tentando gerar uma sequência de números aleatórios de uma das duas maneiras seguintes:

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

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

Toda vez que executo a opção 1, recebo o mesmo número em cada execução de cada loop. Mas diferente em cada execução do programa.

Quando executo a opção 2, recebo 82 nas bibliotecas de impulso, então 0,8199999999999 é retornado. Eu pude entender se tivesse 42 anos, mas 82 está me deixando coçando a cabeça, mesmo depois de ler os documentos aleatórios do Boost.

Alguma ideia?

DJs.

Foi útil?

Solução

Com a opção 2, você não deve criar uma nova instância de rng e die para cada chamada.

Também não tenho certeza se entendi o problema com a opção 1 corretamente: você está ligando para o srand () apenas uma vez, mas cada chamada para rand () fornece o mesmo número? Isso é .. "incomum". Tente reduzir o loop ao mínimo e imprima o valor retornado de Rand ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top