草庐IT

c++ - 多次播种伪随机数生成器的问题?

我已经看到很多关于每次执行时不要多次为伪随机数生成器播种的建议,但从未伴随过详尽的解释。当然,很容易看出为什么以下(C/C++)示例不是一个好主意:intget_rand(){srand(time(NULL));returnrand();}因为每秒多次调用get_rand会产生重复的结果。但是下面的例子难道不是一个可以接受的解决方案吗?MyRand.h#ifndefMY_RAND_H#defineMY_RAND_HclassMyRand{public:MyRand();intget_rand()const;private:staticunsignedintseed_base;};#en

c++ - 并发随机数生成

我正在使用openmp编写一个并行程序,在其中我生成一个随机float矩阵,然后对其进行一些计算。我目前想让生成矩阵的步骤并行运行,但我遇到了rand()函数不打算同时运行的问题。我不想使用锁在rand上提供互斥锁,因为这是循环中唯一要做的事情,顺序运行它可能会更有效率。有什么方法可以并行高效地执行此步骤?这里是这部分的当前代码(rand上没有互斥锁);#pragmaompparalleldefault(private){inti=omp_get_thread_num();for(intj=0;j 最佳答案 如果您使用的是C++,则

c++ - RAND_MAX 和 UINT_MAX 之间的差异会有所不同吗?

我的作业涉及生成0和2^30之间的随机整数。现在,在过去我们了解到rand()只返回小于RAND_MAX的整数,这小于UINT_MAX,并且我们可以使用位移来填充UINT_MAX容量。从我所做的一些阅读中(这里,关于SO),我意识到如果这些数字的分布对我很重要,这可能不是一个好主意。话虽如此,我的教授已经指定了这种方法。我的问题是,位移多少?RAND_MAX和UINT_MAX之间的差异是否始终存在一个安全常数来进行位移?或者是否需要进行一些初始探测以确定要移位的数字?我是否应该保持位移一点点并检查UINT_MAX?我问的原因是,UINT_MAX被定义为至少是某个数字(65535),但在

c++11 STL 的 binomial_distribution 极慢

我正在使用STL的“随机”生成二项式分布的随机数。当范围很大时,它变得非常慢。对于范围40,生成100个数字需要12秒。对于更大的范围,时间会急剧增加(我需要10000左右的范围)。它似乎不依赖于概率参数。我正在使用g++4.5.0。#include#includeusingnamespacestd;vectorv;default_random_enginegen(123);binomial_distributionrbin(40,0.7);intmain(){v.reserve(2000);for(inti=0;i输出:50.~/.../fs/>g++-std=c++0xq.cpp5

c++ - MPI中每个进程的随机数

我正在使用MPICH2来实现“奇偶”排序。我做了实现,但是当我随机分配给每个进程他的值时,相同的数字被随机分配给所有进程。这里是每个进程的代码,每个进程随机化了他的值..intmain(intargc,char*argv[]){intnameLen,numProcs,myID;charprocessorName[MPI_MAX_PROCESSOR_NAME];intmyValue;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myID);MPI_Comm_size(MPI_COMM_WORLD,&numProcs);MPI_Ge

c++-default_random_engine 始终创建相同的数字系列

我正在使用神经网络,我想随机创建权重。因此,如果我创建30个神经网络,它们中的每一个最终都具有相同的权重(应该是随机的),所以当我给它们所有相同的输入时,输出是相同的,而在不应该的时候。有帮助吗?这里是主要功能intmain(){std::vectorv;std::random_devicerd;std::default_random_enginegenerator(rd());std::uniform_real_distributiondistribution(-1.0,1.0);for(inti=0;iinitialize_weights在这里:voidImproved_NN::i

c++ - 如何使用 boost random 生成随机 64 位整数

我正在尝试使用boostrandom生成一个随机的64位无符号整数,但是我遇到了uniform_int的断言失败。structtimevaltv;boost::mt19937randGen(tval.tv_usec);boost::uniform_intuInt64Dist(0,std::numeric_limits::max());boost::variate_generator>getRand(randGen,uInt64Dist);uint64_tclock_seq_=getRand();这是第3行的输出。main:/usr/include/boost/random/unifor

c++ - 在 C++11 中保存随机数生成器状态

我希望能够将随机数生成器的状态保存在.txt文件中并读回。我听说在c++11中,这可以使用>运营商。但是,我不确定我将如何做到这一点。我有一个随机数生成器初始化如下:mt19937myRandomGenerator(1);normal_distributionmyDistribution(0.0,1.0);我希望能够将myRandomGenerator的状态保存在文件save.txt中。我该怎么做? 最佳答案 正如所描述的那样,用operator来写并使用operator>>读取状态.#include#include#include

c++ - 连续创建一个0到1之间的随机数

我正在尝试用C++为股票价格变动建模。我需要创建一个介于0到1之间的随机数。但似乎随机数生成器的值一直在增加,并不是真正随机的。代码如下所示:#include#include#include#includeusingnamespacestd;intmain(){doublestockPrice=25;intstart=0,end=0;start=clock();srand(time(NULL));cout18){if(stockPrice==20){doubleprobability=(rand()/(double)RAND_MAX);if(probability不确定如何解决这个问题

c++ - 实现之间的随机输出不同

我用libstdc++、libc++和dinkumware试过这个程序:#include#include#include#include#include#includeintmain(){std::vectorv(10);std::mt19937rand{0};std::uniform_int_distributiondist(1,10);std::generate_n(v.begin(),v.size(),std::bind(dist,rand));for(autoi:v)std::cout输出分别是:668979695761448104635510414108484每次运行的输出都