0

この種の質問が何度か聞かれたことは知っていますが、多くの回答はRTFMに要約されますが、正しい質問をすることができればと思います...他のすべての人に準決定的な回答を得ることができますさて、実装に関して。

次の2つの方法のいずれかで乱数のシーケンスを生成しようとしています。

#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。

4

1 に答える 1

3

オプション2では、呼び出しごとにの新しいインスタンスを作成しないでくださいrngdie

オプション1の問題を正しく理解しているかどうかもわかりません。つまり、srand()を1回だけ呼び出していますが、rand()を呼び出すたびに同じ番号が返されますか?それは..「珍しい」です。ループを最小限に抑え、rand()から返された値を出力してみてください。

于 2009-11-11T23:50:37.760 に答える