سؤال

وأنا أعلم أن هذا النوع من الأسئلة قد طرحت عدة مرات، ولكن الكثير منهم يجيب على 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، أحصل على 82 من مكتبات التعزيز، لذلك يتم إرجاع 0.81999999999999999999999999999999999999999999999999999999999999999999999999999990 أستطيع أن أفهم ما إذا كان 42، لكن 82 يغادرني خدش رأسي حتى بعد قراءة مستندات عشوائية دفعة.

أيه أفكار؟

دي جي.

هل كانت مفيدة؟

المحلول

مع الخيار 2، يجب أن لا تنشئ مثيل جديد من rng و die لكل مكالمة.

أنا أيضا لست متأكدا مما إذا كنت أفهم المشكلة مع الخيار 1 بشكل صحيح: أنت تتصل Srand () مرة واحدة فقط، ولكن كل مكالمة إلى Rand () تعطيك نفس العدد؟ هذا غير معتاد". حاول تقليل الحلقة إلى الحد الأدنى، وطباعة القيمة التي تم إرجاعها من Rand ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top