草庐IT

c++ - 我如何使用汇编程序从英特尔处理器中获取随机数?

我需要从英特尔处理器(英特尔酷睿i3)中的随机生成器获取随机数。我不想使用任何图书馆。我想在C++中使用汇编程序粘贴,但我不知道应该使用哪些寄存器和指令。 最佳答案 在支持的CPU(目前只有IvyBridge和HaswellIntelCPU)上调用RDRAND指令会将一个随机值放入指定的寄存器中。例如,这将为您提供一个随机的64位值:RDRAND%rax成功时,进位位将被设置。参见英特尔的BullMountainSoftwareImplementationGuide更多细节。(“BullMountain”是英特尔硬件RNG的代号。)

c++ - 基于概率的随机数

我在生成不遵循离散均匀分布的随机数时遇到问题。例如,假设我有5个数字(为简单起见),生成数字k的概率为k/15。(k=1到5)我的想法是使用rand()生成一个随机数j,如果这个数j是:1=>然后生成数字12或3=>数字24或5或6=>数字37或8或9或10=>数字411或12或13或14或15=>数字5现在将其缩放为生成1-10、1-100、1-1000。这是否按我预期的方式工作?我构建了一个循环,每次需要生成一个数字时,它几乎都会执行此操作,我认为它可能效率低下,因为它一直上升直到找到在其中一个范围内生成的j数字......有什么更好的方法做这个?编辑:或者用正确的数字创建一个数组

c++ - 生成随机数(没有成员生成存在错误)

我正在尝试创建一个对象,该对象应该为我的轮盘赌程序实现一些方法,但是在编译时出现错误,std::random_device中不存在成员生成这是一个类的例子:#includeclassEngine{public:Engine();intspin();private:std::mt19937m_generator;std::uniform_int_distributionm_distribution;std::random_devicem_seed;};Engine::Engine():m_generator(m_seed),m_distribution(0,36){}intEngine:

c++ - 如何生成具有指数分布(均值)的随机数?

我正在尝试生成均值为1的指数分布随机数。我知道如何获取具有均值和标准差的正态分布随机数。我们可以通过normal(mean,standard_deviation)得到它,但是我不知道如何得到指数分布的随机数。谁能帮我解决这个问题? 最佳答案 在C++11中,标准实际上保证了RNG遵循STL中可用的指数分布的要求,object-type有一个非常具有描述性的名称。指数分布随机生成器中的均值由公式E[X]=1/lambda1计算。std::exponential_distribution有一个以lambda作为参数的构造函数,因此我们可

c++ - 如何生成64位随机数?

我正在实现通用哈希并使用以下通用哈希函数:h(k)=((A*k)mod2^64)rsh64-r其中A是介于之间的随机数2^61and2^62.C++中的rand()函数具有返回类型integer并且它不能生成那么大的数字。那么我怎样才能生成这个范围内的随机数呢?(数字应该是非常随机的,即每个数字应该有相同的概率被选中)注意:longlongintrandom=rand();不起作用,因为rand返回的数字是int。 最佳答案 在C++11中,您可以使用randomheader和std::uniform_int_distributio

c++ - 用随机数填充数组

我正在尝试用1-20中的随机数字填充20个整数的数组。这是我的代码:intlookup[20]={0};intarray[20]={0};srand(time(NULL));for(inti=0;i我创建了一个查找数组来检查是否尚未选择随机数并将其存储在数组中。如您所见,我创建了2个循环,一个用于遍历数组,另一个用于选择随机数。在每次while循环迭代中,数字可能会重新出现并导致另一个while循环。有更快的方法吗? 最佳答案 您可以按顺序填充数组,然后将其打乱。这将避免生成20次以上的随机数。Fisher-Yatesshuffle

c++ - 随机数和负数

我必须生成[-100;范围内的数字+2000]在C++中。如果只有正数可用,我怎么能用rand做到这一点?有什么快速的方法吗? 最佳答案 生成一个介于0和2100之间的随机数,然后减去100。快速谷歌搜索出现了decentlookingarticleonusingRand().它包括在文章末尾使用特定范围的代码示例。 关于c++-随机数和负数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest

c++ - boost 随机数库,对不同的变量生成器使用相同的随机数生成器

似乎可以使用以下代码从特定的正态分布中生成随机数:floatmean=0,variance=1;boost::mt19937randgen(static_cast(std::time(0)));boost::normal_distributionnoise(mean,variance);variate_generator>nD(randgen,noise);floatrandom=nD();这很好用,但是,我希望能够从多个分布中提取数字,即有人会这样想:floatmean1=0,variance1=1,mean2=10,variance2=0.25;boost::mt19937rand

c++ - 在 C++11 中使用哪个伪随机数生成器?

C++11带有一组PRNG。在什么情况下应该选择一个而不是另一个?它们的优点、缺点等是什么。 最佳答案 我认为Mersennetwisterstd::mt19937引擎作为“默认”PRNG就好了。您可以只使用std::random_device为mt19937获取非确定性种子。StephanT.Lavavej在GoingNative2013上有一个非常有趣的演讲:rand()ConsideredHarmful您也可以从该网站下载幻灯片。特别是,幻灯片#23清楚地比较了mt19937与random_device:mt19937is:F

windows - 命令提示随机数是如何生成的?

在命令提示符环境中,有一个变量%random%,它使用某种算法生成伪随机数。有人知道生成这些数字的算法吗? 最佳答案 %random%动态变量生成一个从0到32,767(含)的随机数。生成这些数字的算法是这样的:srand((unsigned)time(NULL));ItturnsoutthattheWindowscommandprocessorusesthestandardnaïvealgorithmforseedingtherandomnumbergenerator(Quotefromhere)由于时间种子,它每秒吐出一个新数字