如何在c ++中设置RNG的种子?

时间:2014-01-21 22:24:49

标签: c++ matlab visual-c++ random c++-cli

有谁能告诉我如何在C ++中生成相同的随机数值?

我在Matlab中知道我可以做到以下几点:

rng(1)
a= randi(10,1,10)

答案是一样的。例如

5     8     1     4     2     1     2     4     4     6

5     8     1     4     2     1     2     4     4     6

5     8     1     4     2     1     2     4     4     6

除非重置种子,否则它会一直给我相同的值。

但我不知道如何在C ++中这样做。

3 个答案:

答案 0 :(得分:0)

您是否正在寻找为随机数生成器播种的函数srand?它经常用于播种当前时间,但如果需要,可以使用它以固定值播种。

答案 1 :(得分:0)

创建std::random_device的实例,该实例提供可能的非确定性统一随机数,并使用它来为您选择的随机数引擎播种:

std::random_device rd;
std::default_random_engine gen(rd());

如果您想知道如何为C库函数rand设定种子,则需要使用std::srand。它通常以当前时间std::time(0)播种。

当然,您无法使用std::random_device种子rand

答案 2 :(得分:0)

  

使用相同种子的两个不同初始化将生成   随后对兰德的调用也会产生相同的结果。

     

如果seed设置为1,则将生成器重新初始化为其初始值   value并产生与调用rand或之前相同的值   srand

#include <stdlib.h>     /* srand, rand */
#include <time.h> 

int random = rand();
int next = rand();
int next2 = rand();

//another sequence
srand (time(NULL));
int 2random = rand();
int 2next = rand();
int 2next2 = rand();

//will repeat the first sequence
srand (1);
int 3random = rand();
int 3next = rand();
int 3next2 = rand();