c++中2个数字之间的随机数重置
C++ random number between 2 numbers reset
下面的函数运行了,但每次运行程序时总是返回相同的数字。是否有一种方法可以在每次运行程序时生成不同的随机数?
int getrand(int min,int max){
int rnum = rand()%(max-min)+min;
return rnum;
}
您可能喜欢使用高质量的标准库随机数生成工具:
#include <random>
typedef std::mt19937 rng_type;
std::uniform_int_distribution<rng_type::result_type> udist(min, max);
rng_type rng;
int main()
{
// seed rng first:
rng_type::result_type const seedval = 4; // or implement a good get_seed()?
rng.seed(seedval);
rng_type::result_type random_number = udist(rng);
return random_number;
}
try with this:
/* initialize random seed: */
srand ( time(NULL) );
在程序启动时的某个位置(绝对不在getrand()函数中)。这将强制生成器每次使用不同的种子启动。
你好像忘记给srand
打电话了
伪随机数生成器在使用之前需要"播种";默认的种子每次都是相同的,所以你得到相同的序列。
通常使用srand(time(NULL))
之类的东西,但如果在一秒钟内再次运行程序,则会失败。
在播种后使用一两个随机数也很好,因为前几个值与种子本身高度相关。
随机化一次的简单解决方案是:
int getrand(int min, int max) {
static bool init = false;
if (!init) {
srand(time(NULL));
init = true;
}
return rand()%(max-min)+min;
}
需要初始化种子。看看srand
。此外,如果需要,可以尝试boost:
boost::lagged_fibonacci607 base_prng(seed);
boost::variate_generator<boost::lagged_fibonacci607&,boost::uniform_smallint<> > prng(base_prng,boost::uniform_smallint<>(min,max))
相关文章:
- 查找彼此之间具有不同最小距离的随机数
- 使用 std::binomial_distribution 在范围之间生成随机数
- 如何在 C++ 中获取 5 到 -5 之间的随机数
- C++ 和 Python 实现之间的不同伪随机数
- 生成随机数,并保证在给定域之间覆盖所有
- 我如何确保我的随机数在兰德生成的0和1之间不是0
- 在[0,1)C 之间生成一个随机数
- 0-1之间的随机数生成以填充容器
- 盒子muller随机数在C 中的0到1之间
- 在random_device和seed_seq之间做出决定,为多个随机数序列生成种子
- C++ 中介于 0 和 1 之间的随机数
- 本应生成 2 个介于 1 和 9 之间的随机数的程序C++只生成 6 和 9 并且没有正确循环
- 在0到1之间生成随机数
- 分叉进程之间的随机数是相同的
- 如何在 c++ 中生成 0 到 4 之间的随机数
- 介于 2 个值之间的随机数
- 如何在我存储的两个变量之间生成随机数
- 使用 C++ 的 1 到 10 之间的随机数
- 如何在c++中生成一个介于1和16之间的随机数
- C++生成一个介于 0 和 100,000 之间的随机数