有没有办法在C++中实现C#Random()类?我特别需要根据给定的种子生成相同的数字序列。场景:我正在努力通过利用C#中Random()的使用来生成key来“破解”几个加密恶意软件。显然,这对于只有2^32个可能的key,~4.3B个key来说是弱的,这在猜测的可能性范围内。我用C#编写了暴力破解器,但无论我优化多少,它们都相当慢。我想在C++中实现一个bruteforcer以获得最佳效率(“更接近硬件”),因为我可以通过解密部分获得更好的速度优化(例如AES-256通常,将来甚至可以利用GPU),并以指数方式获得更好的输出。显然,Random(seed)!=srand(seed),
我想播种randn函数,但我做不到。srand(time(NULL));Matmymat=Mat::zeroes(1024,1024,CV_32F);randn(mymat,0,1);它不应该给我随机垫,命名为mymat,其mean=0和variance=1?但是,它在每次运行时都提供相同的mymat。这是randn的链接它声称srand可以工作。我尝试给出不同的数字而不是时间(NULL),但它们都具有相同的输出随机数。我已经从另一台机器上检查过同样的东西,它给出了与第一台机器相同的输出。所以播种不起作用。谢谢, 最佳答案 您可以使
C++标准(从C++11一直到当前的C++17草案)在[rand.eng.lcong]中说明如下:templateexplicitlinear_congruential_engine(Sseq&q);Effects:Constructsalinear_congruential_engineobject.Withk=⌈log2(m)÷32⌉andaanarray32(orequivalent)oflengthk+3,invokesq.generate(a+0,a+k+3)andthencomputesS=(∑j=0k−1aj+3·232j)modm.Ifcmodmis0andSis0,
我正在使用boostmt19937实现进行模拟。模拟需要可重现,这意味着存储RNG种子并可能在以后重复使用。我正在使用windowscryptoapi生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个注释,包括RNG种子-所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上不同,我需要使用不同的种子——所以种子需要足够长以避免意外碰撞。我已经确定64位的播种应该足够了;在大约2^32次运行后发生碰撞的可能性将达到50%——这个概率足够低,以至于由它引起的平均错误对我来说可以忽略不计。仅使用32位
在一个函数中,我想生成一个范围内的数字列表:(该函数只会在程序执行时被调用一次。)voidDataSet::finalize(doubletrainPercent,boolgenValidData){srand(time(0));printf("%d\n",rand());//indices={0,1,2,3,4,...,m_train.size()-1}vectorindices(m_train.size());for(size_ti=0;i结果是这样的:850577673246239710241201288231237几秒钟后:856981140246239710241201288
我有一个启动许多客户端进程的bash脚本。这些是我用来测试多人游戏的AI游戏玩家,大约有400个连接。我遇到的问题是AI播放器使用srand(time(nullptr));但是如果所有玩家都大约在同一时间开始,他们将经常收到相同的time()值,这意味着他们都在同一个rand()序列上。部分测试过程是为了确保如果大量客户端几乎同时尝试连接,服务器可以处理。我考虑过使用类似的东西srand((int)this);或类似的,基于每个实例都有唯一内存地址的想法。还有其他更好的方法吗? 最佳答案 将随机种子用于伪随机生成器。std::ran
我想初始化boost::random::discrete_distribution用std::vector.我的问题是,如果我用一个数组初始化它,就像在官方例子中那样:doubleprobabilities[]={0.5,0.1,0.1,0.1,0.1,0.1};boost::random::discrete_distributiondist(probabilities);然后它就完美地工作了。但是,如果我用std::vector初始化它,那么它的行为就像它只有一个概率为1.0的元素一样。你能告诉我初始化boost::random::discrete_distribution的正确方法
我正在尝试为伪随机数生成器生成良好的随机种子。我想我会得到专家的意见。让我知道这是否是一种糟糕的做法,或者是否有更好的方法。#include#include#include#includeunsignedintgood_seed(){unsignedintrandom_seed,random_seed_a,random_seed_b;std::ifstreamfile("/dev/random",std::ios::binary);if(file.is_open()){char*memblock;intsize=sizeof(int);memblock=newchar[size];fi
我想在C++中生成0到1之间的统一随机数,其方式不使用标准rand()和srand(time(NULL))方法。这样做的原因是,如果我在时钟的同一秒内多次运行应用程序,种子将完全相同并产生相同的输出。我不想依赖提升或操作系统/编译器细节。可以假定为x86。似乎另一种方法是使用TR1(我没有C++11)并以某种方式使用/dev/random进行播种?现在我有这个,但它仍然使用time(NULL)作为种子,在1秒内运行将无法正常工作:#include#includeintmain(){std::tr1::mt19937eng;eng.seed(time(NULL));std::tr1::u
我正在开发一个在构造函数中使用rand()的C++类。我真的很希望这个类在几乎所有方面都能照顾好自己,但我不确定在哪里播种rand()。如果我在构造函数中播种rand(),则每次构造我的对象类型的新实例时都会播种。因此,如果我按顺序创建3个对象,它们将在同一秒内创建,因此rand()具有相同的种子,从而为3个实例中的每一个实例生成完全相同的数据对象。我想在类代码中播种rand(),而不是在创建对象之前在程序的主要函数中进行播种。我想做一个staticboolseeded;变量来表示rand()是否已经播种,但我不太确定如何将它初始化为false在创建类时。我的想法是这样的myConst