-
头文件:
#include
-
作用:随机生成一个整数i,根据分布概率函数 P ( i ∣ a , b ) = 1 b − a + 1 P(i|a,b)=\frac{1}{b-a+1} P(i∣a,b)=b−a+11均匀分布在一个闭区间**[a, b]**
-
用法:
#include
#include using namespace std; int main(int argc, char const* argv[]) { random_device rd; // 用于随机数引擎获得随机种子 std::mt19937 gen(rd()); // 以rd()为种子的标准mersenne_twister_engine uniform_int_distribution<int> distribute(1, 6); for (int i = 0; i < 10; ++i) { cout << distribute(gen) << " "; } cout << endl; } 输出:
4 5 3 6 1 4 6 4 6 6
由于是伪随机算法,所以每次运行生成的随机数都是一样的
以下使用时间函数可生成真随机数:
#include
#include #include using namespace std; int main(int argc, char const* argv[]) { random_device rd; // 用于随机数引擎获得随机种子 std::mt19937 gen((unsigned int)time(NULL)); // 以(unsigned int)time(NULL)为种子的标准mersenne_twister_engine,每次都是不同的 uniform_int_distribution<int> distribute(1, 6); for (int i = 0; i < 10; ++i) { cout << distribute(gen) << " "; } cout << endl; } -
注:
-
random_device:
std::random_device
是一个均匀分布的整数随机数生成器,它产生非确定性随机数。std::random_device
如果非确定性源(例如硬件设备)对实现不可用,则可以根据实现定义的伪随机数引擎来实现。在这种情况下,每个std::random_device
对象都可以生成相同的数字序列。
-
std::mt19937:
typedef mersenne_twister_engine< uint_fast32_t, 32, 624, 397, 31, 0x9908b0dfUL, 11, 0xffffffffUL, 7, 0x9d2c5680UL, 15, 0xefc60000UL, 18, 1812433253UL> mt19937;
梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。
Mersenne Twister有以下优点:随机性好,在计算机上容易实现,占用内存较少(mt19937的C程式码执行仅需624个字的工作区域),与其它已使用的伪随机数发生器相比,产生随机数的速度快、周期长,可达到219937-1,且具有623维均匀分布的性质,对于一般的应用来说,足够大了,序列关联比较小,能通过很多随机性测试。
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)