草庐IT

c++ - 为什么 boost 的随机数生成(正态分布)总是给出相同的值?

我正在生成一些随机数并出现可疑行为。这是我的代码://initializedearlier...intheconstructorofaclassboost::mt19937*rng=newboost::mt19937();rng->seed(time(NULL));//actualusehere.for(inti=0;idistribution(10,10);boost::variate_generator>resampler(*rng,distribution);constdoublesample=(resampler)();//alwaysthesamevalue.}我是否滥用了b

c++ - 用特征随机排列矩阵的行/列

我正在使用Eigen并且我有一个矩阵:MatrixXix=MatrixXi::Random(5);我想使用随机绘制的排列(行和列只有一个排列)随机排列行和列,即如果我有一个发送索引[0,1,2,3,4]->[3,4,2,1,0]比我想用相同的排列对行和列重新排序。第1部分:我无法在网上找到PermutationMatrix的示例,而且我在理解语法方面遇到了麻烦。第2部分:如何获取随机置换的索引vector以传递给它?也许是std::random_shuffle?更新:这是一种(可能效率低下的)方法来获得一组打乱的索引:std::vectorperm;for(inti=0;i所以现在的问

c++ - 现实程序中来自 c++ <random> 库的随机数生成器

我正在了解这个库,它在很多方面改进了旧的rand和srand。但是对于rand,很明显只有一个随机数生成器在使用rand时被调用和更新,无论它在您的程序中的何处。使用新方法时,我不确定如何以良好的风格有效地模仿这种行为。例如,如果我想要掷骰子,并且模仿在主过程中编写的在线示例,我用这样的方法编写了一个对象:classfoo{public:floatgetDiceRoll(){std::random_devicerd;std::default_random_enginee1(rd());std::uniform_int_distributionuniform_dist(1,6);retu

c++ - 随机数生成器种子和状态之间有什么区别?

我看到一个C++程序接受种子和状态来设置std::default_random_engine,它是std::linear_congruential_engine的类型定义(在我的系统上至少)。seed()方法用于设置状态的初始种子和operator>>。我知道播种随机数生成器(RNG)的原理,但可以将其与其状态互换使用。 最佳答案 种子是用于初始化生成器的值,状态是每次调用生成随机数后生成器的当前状态。对于非常简单的随机数生成器,例如线性同余生成器,种子和状态是相同的东西(或者至少,存储在同一个变量中),但它们当然不一定是。

C++ rand 和 srand 在不同的机器上得到不同的输出

我想生成一个随机整数,所以我使用了C++rand(void)和srand(int)函数:intmain(){srand(1);cout好的,它符合我的需要。每次我执行它都会得到相同的结果,我喜欢它!但有一个问题。当我在我的计算机上执行它时,我得到16807作为输出。但是当我在另一台机器上执行时,我得到了1804289383。我知道rand()和srand(int)有一个与此类似的简单实现:staticunsignedlongintnext=1;intrand(void)//RAND_MAXassumedtobe32767{next=next*1103515245+12345;retur

c++ - 程序在每次运行时生成相同的随机数?

这个问题在这里已经有了答案:Whydoesrand()yieldthesamesequenceofnumbersoneveryrun?(7个答案)关闭4年前。我刚刚完成了一个扫雷类型游戏的编码,一切都很好,除了每次我运行该应用程序时,它都会生成相同的数字(我运行了3次不同的时间,将输出保存到3个文本文件并使用了diff命令,它没有发现任何差异)。它由time(NULL)播种,所以它应该每次都改变,对吗?这是我的代码:主要.cpp#include#include#include#include#include"Minesweeper/box.h"#includeintmain(intar

C++0x random_device 'std::runtime_error'

我是C++初学者,我对C++0x随机数生成器有疑问。我想使用Mersennetwister引擎来生成随机int64_t数字,并且我使用我之前找到的一些信息编写了一个函数:#include#includeint64_tMyRandomClass::generateInt64_t(int64_tminValue,int64_tmaxValue){std::random_devicerd;std::default_random_enginee(rd());unsignedchararr[8];for(unsignedinti=0;i(arr[0])|static_cast(arr[1])(a

C++ 随机数生成器

我正在编写一个彩票应用程序。我有一个名为generateLotteryNumbers的函数,它接受一个数组并用5个随机数填充该数组。我想要做的是让这个函数在每次调用这个函数时产生一组不同的随机数。voidgenerateLotteryNumbers(intlotteryNumbers[]){srand(time(NULL));constintarraySize=5;intindex=0;while(index此时的输出为:524452647重复两次。 最佳答案 调用srand恰好一次,通常在main中的代码的早期。

c++ - std::mt19937 和 std::uniform_real_distribution 每次都返回边界值

好的,所以我有一些RNG代码(当一切都说完了)归结为:#include#include#include#includedoublerandomValue(){//SeedaMersenneTwister(goodRNG)withthecurrentsystemtimestd::mt19937generator(std::chrono::system_clock::now().time_since_epoch().count());std::uniform_real_distributiondist(std::numeric_limits::lowest(),std::numeric_l

c++ - 这个 PRNG 背后的理论是什么?

__forceinlinestaticintRandom(){intx=214013,y=2531011;seed=(x*seed+y);return((seed>>16)&0x7FFF)-0x3FFF;}上面的代码返回具有良好均匀分布的PRNG。现在将x更改为x+1-生成的序列不能再称为PRNG。那么(这个)PRNG背后的理论是什么?“x和y是精心挑选的”,但它们是如何选择的? 最佳答案 这看起来像一个Linearcongruentialgenerator.当乘数x可被模减一的所有质因数整除时,LCG更好(此处为0x3FFFFFF