Правильное использование S/RAND или Boost :: Случайный
Вопрос
Я знаю, что этот вид вопроса был задан несколько раз, но многие из них отвечают на RTFM, но я надеюсь, что смогу ли я задать правильный вопрос ... Я могу получить квази-определяющий ответ для всех остальных, как Ну, относительно реализации.
Я пытаюсь генерировать последовательность случайных чисел одним из двух следующих способов:
#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);
}
Где Миранд ():
#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;
}
Каждый раз, когда я запускаю опцию 1, я получаю одинаковое число при каждом выполнении каждого цикла. Но в каждом заезде программы.
Когда я запускаю вариант 2, я получаю 82 из библиотек Boost, поэтому возвращается 0,81999999999999. Я мог понять, было ли 42 года, но 82 оставляет мне почесать голову даже после прочтения случайных документов Boost.
Любые идеи?
Диджеи.
Решение
С вариантом 2 вы не должны создавать новый экземпляр rng
а также die
для каждого звонка.
Я также не уверен, правильно ли я понимаю проблему с вариантом 1: вы звоните Srand () только один раз, но каждый вызов Rand () дает вам одинаковое число? Это .. "необычно". Попробуйте уменьшить цикл до минимума и распечатать значение, возвращаемое из rand ().