草庐IT

C++11 seed_seq 初始化

头文件允许初始化种子序列的内部序列。seed_seq类的对象可以通过多种方式构建。我对其中一种方法很好奇,特别是使用了什么C++技术。我在这里查看网站:http://www.cplusplus.com/reference/std/random/seed_seq/seed_seq/在示例部分,我看到了这一行:std::seed_seqseed2={102,406,7892};这里究竟发生了什么?似乎正在将一个类对象分配给一个数组。我查看了初始化列表构造、复制赋值构造函数,但我仍然对到底发生了什么感到困惑。我明白了std::seed_seqseed3(foo.begin(),foo.end

c++ - 使用快速英特尔随机生成器 (SSE2) 失败并出现堆栈...已损坏

我需要非常快(最快)的随机生成器。我从英特尔找到了这个:FastIntelRandomNumberGenerator看起来不错。所以我在MSVisualStudio2013中创建了项目://FastRandom.h:#pragmaonce#include"emmintrin.h"#include//definethisifyouwishtoreturnvaluessimilartothestandardrand();#defineCOMPATABILITYnamespaceBrans{__declspec(align(16))static__m128icur_seed;//uncome

c++ - 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?

我有许多独立的随机过程(比如到达过程)需要我生成随机数。我想为这些过程中的每一个使用通用随机数,以便我可以比较不同策略在控制这些策略时的执行情况。我希望进程A由生成器A管理(使用种子A)我希望进程B由生成器B管理(使用种子B)..等等。这可以在R中实现吗?我找不到任何人做过。我试过了。如果这是一个重复的问题,请原谅我。谢谢jack 最佳答案 这是我偶尔想做的事情-并且还没有想出比下面的杂凑更好的东西(只有当你只使用1或2个不同的随机分布时它才真正有用,因为你必须为每个函数编写一个函数:#Makealistofseeds-genera

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++ - C++11 : is there a simple way to seed the generator in one place of the code, 中的随机数然后在不同的函数中使用它?

在C++11之前,我使用rand()来自选择在main()中播种(或不播种)生成器非常简单函数(例如),然后在libraryA中使用由libraryB中某个函数生成的随机数。代码如下所示:LibraryB(生成随机数,老式的方式):#include//rand,RAND_MAXdoubleGetRandDoubleBetween0And1(){return((double)rand())/((double)RAND_MAX);}主程序:#include//srand#include//time,clockintmain(){booliWantToSeed=true;//orfalse,

c++ - 更好的随机算法?

我正在用C++制作一个游戏,它涉及用随机bool值(是或否)填充方block,是否是由rand()%1决定。感觉不是很随意。我在启动时将srand与ctime一起使用,但似乎出现了相同的模式。是否有任何算法可以创建非常随机的数字?或者关于如何改进rand()的任何建议? 最佳答案 真正的随机性通常看起来并不是很随机。不要期望看到奇怪的运行。但至少您可以立即做的一件事是避免只使用最低位。在C中引用数字食谱:Ifyouwanttogeneratearandomintegerbetween1and10,youshouldalwaysdoi

c++ - 为什么 linear_congruential_engine::seed(Sseq) 会丢弃种子序列生成的三个数字?

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·232​j)modm.Ifcmodmis0andSis0,

c++ - boost 梅森扭曲器 : how to seed with more than one value?

我正在使用boostmt19937实现进行模拟。模拟需要可重现,这意味着存储RNG种子并可能在以后重复使用。我正在使用windowscryptoapi生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个注释,包括RNG种子-所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上不同,我需要使用不同的种子——所以种子需要足够长以避免意外碰撞。我已经确定64位的播种应该足够了;在大约2^32次运行后发生碰撞的可能性将达到50%——这个概率足够低,以至于由它引起的平均错误对我来说可以忽略不计。仅使用32位

c++ 为 psudo 随机数生成器生成一个好的随机种子

我正在尝试为伪随机数生成器生成良好的随机种子。我想我会得到专家的意见。让我知道这是否是一种糟糕的做法,或者是否有更好的方法。#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++ - 与 C++ 2011 不相关的并行随机种子?

目前,我有一个Fortran语言的主要应用程序,它需要一个种子来生成伪随机数。我想用完全不相关的种子(以及完全独立的伪随机数链)运行这个应用程序很多(很多)次。我的问题是:如何使用C++2011生成种子? 最佳答案 在您的主线程中,从良好的随机源(例如,Linux上的/dev/urandom)中提取单个种子(或种子序列)。使用该数据为单个根PRNG播种。然后使用thatPRNG为您的线程局部PRNG生成种子值。#include#includetypedefstd::mt19937rng_type;std::uniform_int_d