Frage

Ich weiß Nun, in Bezug auf die Implementierung.

Ich versuche auf eine der beiden folgenden Arten eine Folge von Zufallszahlen zu generieren:

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

Wo Myrand () ist:

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

Jedes Mal, wenn ich Option 1 ausführe, erhalte ich bei jeder Ausführung jeder Schleife dieselbe Zahl. Aber anders bei jedem Programm.

Wenn ich Option 2 ausführe, bekomme ich 82 aus den Boost -Bibliotheken, so dass 0,8199999999999 zurückgegeben werden. Ich konnte verstehen, ob es 42 war, aber 82 verlässt mich, auch nach dem Lesen der Boost Random Docs den Kopf.

Irgendwelche Ideen?

DJs.

War es hilfreich?

Lösung

Mit Option 2 sollten Sie keine neue Instanz von erstellen rng und die Für jeden Anruf.

Ich bin mir auch nicht sicher, ob ich das Problem mit Option 1 richtig verstehe: Sie rufen Srand () nur einmal an, aber jeder Anruf bei Rand () gibt Ihnen die gleiche Nummer? Das ist ungewöhnlich". Versuchen Sie, die Schleife auf das Minimum zu reduzieren und den von Rand () zurückgegebenen Wert auszudrucken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top