【问题标题】:how to set seed of RNG in c++?如何在 C++ 中设置 RNG 的种子?
【发布时间】:2014-02-11 18:25:11
【问题描述】:
谁能告诉我如何在 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++ 中做到这一点。
【问题讨论】:
标签:
c++
matlab
visual-c++
random
c++-cli
【解决方案1】:
使用相同种子的两个不同初始化将生成
在后续调用 rand 时会产生相同的连续结果。
如果种子设置为 1,则生成器将重新初始化为其初始值
值并产生与调用 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();
【解决方案2】:
您是否正在寻找作为随机数生成器种子的函数srand?它经常用于以当前时间播种,但如果需要,您可以使用它以固定值播种。
【解决方案3】:
创建一个 std::random_device 的实例,它可能提供不确定的统一随机数,并使用它来为您选择的随机数引擎播种:
std::random_device rd;
std::default_random_engine gen(rd());
如果您想知道如何为 C 库函数 rand 播种,则需要使用 std::srand。它通常以当前时间为种子,std::time(0)。
当然,您没有理由不能使用 std::random_device 来播种 rand。