草庐IT

c++ - 调用随机数生成成员函数不会产生完全随机数

我正在使用C++创建一个wxWidget应用程序,在程序开始时我希望应用程序窗口包含具有随机颜色的像素,如下所示:在上面的应用程序中有3600个像素(60x60),我使用uniform_int_distribution为每个像素赋予随机RGB颜色。上图中像素的颜色是在我的代码中使用以下函数生成的:voidrandom_colors(intctable[][3],intn){//constructatrivialrandomgeneratorenginefromatime-basedseed:unsignedseed=std::chrono::system_clock::now().ti

Unity 中的随机数的基础常用的随机数生成方法

在Unity中,可以使用Random类来生成随机数。以下是一些常用的随机数生成方法:Random.Range(min,max):生成一个在[min,max)范围内的随机整数。Random.value:生成一个在[0,1)范围内的随机浮点数。Random.insideUnitCircle:生成一个在单位圆内的随机二维向量。Random.insideUnitSphere:生成一个在单位球内的随机三维向量。Random.onUnitSphere:生成一个在单位球表面上的随机三维向量。Random.Range01():生成一个在[0,1]范围内的随机浮点数。Random.Range(-1f,1f):生

C++11 从频繁变化的范围内生成随机数

问:如何从先验未知范围生成(许多)均匀分布的整数?就性能(数百万个生成的数字)而言,首选方式是什么?上下文:在我的应用程序中,我必须在许多地方生成许多伪随机数。我对生成器使用单例模式来保持应用程序运行的可重复性。在我的例子中,分布总是均匀的,但问题是有太多可能的范围来预先制作C++11风格的分布对象。我的尝试:对此有两个明显的解决方案,第一个是使用一次性分布对象,第二个是使用模数将随机数从尽可能广泛的范围转换为所需的范围。但不知何故,我怀疑这些是最好的:)#include#include#include"limits.h"usingnamespacestd;mt19937mt;unif

C++ 从 1 到一个非常大的数(例如 2500 万)的随机数

你会如何编写一个函数来生成1到2500万之间的随机数?我考虑过使用rand()但我认为最大数量RAND_MAX是=32000(大约)是否正确?有没有办法解决这个问题,既不降低选择极低数字的概率,也不增加选择高/中数字的概率?编辑:@JameyD的方法完全独立于Qt。 最佳答案 您可以(应该)使用新的C++11std::uniform_real_distribution#includestd::random_devicerd;std::mt19937gen(rd());std::uniform_real_distributiondis

c++ - 使用 TR1/dev/random 在 C++ 中生成随机数(弹性到 <1 秒运行)

我想在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

c++ - 如何在 C++ 中生成非常大的随机数

我想使用C++生成0-2^64范围内的非常大的随机数。我使用了rand()函数,但它没有生成非常大的数字。谁能帮忙? 最佳答案 对于c++11,使用标准randomlibraryofc++11,你可以这样做:#include#includeintmain(){/*Seed*/std::random_devicerd;/*Randomnumbergenerator*/std::default_random_enginegenerator(rd());/*Distributiononwhichtoapplythegenerator*/s

c++ - 使用 Thrust 生成均匀分布的随机数

我需要使用Thrust生成一个包含0.0和1.0之间随机数的vector。我能找到的唯一记录示例会生成非常大的随机数(thrust::generate(myvector.begin(),myvector.end(),rand)。我确信答案很简单,但我将不胜感激任何建议。 最佳答案 Thrust具有随机生成器,您可以使用它来生成随机数序列。要将它们与设备vector一起使用,您需要创建一个仿函数,它返回随机生成器序列的不同元素。最直接的方法是使用计数迭代器的转换。一个非常简单的完整示例(在本例中生成介于1.0和2.0之间的随机单精度数

c++ - 均匀分布的随机数生成

为什么这段代码会生成均匀分布的数字?我在理解它时遇到了一些困难。有人可以解释吗?谢谢。intRandomUniform(intn){inttop=((((RAND_MAX-n)+1)/n)*n-1)+n;intr;do{r=rand();}while(r>top);return(r%n);}更新:我明白为什么rand()%n没有给你一个均匀分布的序列。我的问题是为什么top=((((RAND_MAX-n)+1)/n)*n-1)+n;这里有什么问题?我认为一个简单的top=RAND_MAX/n*n就可以了。 最佳答案 该函数假定ran

c++ - c++11在另一个线程中提前生成随机数

对于C++中的一些数值模拟,我需要生成许多具有指数分布的随机数(都具有相同的预定分布)。目前,我的程序运行良好,但超过50%的CPU时间花在了生成这些随机数上。我想做的是以不阻塞模拟主循环的方式生成这些随机数。更准确地说,我想要一个线程,它的工作是始终保持一个随机数“提前准备好”,并在有人读取这个随机数时立即生成一个新的随机数。有人知道这样做的好方法吗?目前,我的顺序代码如下所示:#include#include#includeusingnamespacestd;//exponentialrandomvariablewithparameterlambdaclassEXPGenerato

c++ - 在 C++ 中使用均匀实数分布生成的随机数并不是真正均匀分布的

我写了一个小代码来确保我可以从非常广泛的范围内获得随机数,例如。[0,10^36)因为我稍后会用到这些大范围。我的代码如下:#include#include#include#includeintmain(){unsignedseed=std::chrono::system_clock::now().time_since_epoch().count();doubleexpo=pow(10,36);std::uniform_real_distributiondist(0,expo);std::mt19937_64rng(seed);for(inti=0;i下面是一个输出示例:6.75507