正确使用s / rand或Boost :: random

时间:2009-11-11 23:39:27

标签: c++ boost random srand

我知道这个问题已被问过几次了,但很多答案都归结为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);
 }

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

每次运行选项1时,每次循环执行时都会得到相同的数字。但是每次运行都会有所不同。

当我运行选项2时,我从boost库中获得82,因此返回0.81999999999999。我能理解它是不是42,但即使在阅读了随机文档之后,82仍然让我摸不着头脑。

有什么想法吗?

DJS。

1 个答案:

答案 0 :(得分:3)

使用选项2,您不应为每次调用创建rngdie的新实例。

我也不确定我是否正确理解了选项1的问题:你只调用srand()一次,但每次调用rand()都会给你相同的数字?那是......“不寻常”。尝试将循环减少到最小,并打印从rand()返回的值。