gpt4 book ai didi

c++ - boost 随机生成器返回相同的值

转载 作者:行者123 更新时间:2023-11-27 23:53:08 25 4
gpt4 key购买 nike

不使用 C++ 11 随机

正在寻找 boost 随机数的专家...我需要生成许多不同范围之间的随机数。我编写了以下函数:

#include <iostream>
#include <boost/random.hpp>
#include <boost/generator_iterator.hpp>

boost::mt19937 g_oRng;

int generateIntVariate(int p_iMin, int p_iMax){
boost::uniform_int<> min_to_max(p_iMin, p_iMax);
boost::variate_generator< boost::mt19937, boost::uniform_int<> > oGen(g_oRng, min_to_max);
return oGen();
}

float generateFloatVariate(int p_fMin, p_fMax){
boost::uniform_real<> min_to_max(p_fMin, p_fMax);
boost::variate_generator< boost::mt19937, boost::uniform_real<> > oGen(m_oRng, min_to_max);
return oGen();
}


int main(){
struct timeval tp;
gettimeofday(&tp, NULL);
g_oRng = boost::mt19937((int)tp.tv_sec);


for(int i = 0 ; i < 10 ; ++i){
std::cout << generateIntVariate(0, 10) << ", " << generateFloatVariate(0.0f, 10.0f) << std::endl;
}
}

问题是这两个函数在给定范围内每次执行时都返回相同的精确数字。

(gdb) p generateIntVariate(0, 10)
$40 = 8
(gdb) p generateIntVariate(0, 10)
$41 = 8
(gdb) p generateIntVariate(0, 10)
$42 = 8
(gdb) p generateIntVariate(0, 10)
$43 = 8

与上面相同的事情发生在 float 函数上。有什么方法可以使用 boost 随机发行版来完成我想做的事情吗?

最佳答案

boost::variate_generator 的构造函数如下所示:

variate_generator(Engine e, Distribution d);

- 表示它不会改变传入的状态 m_oRng并制作一份拷贝。

我建议省略 variate_generator并且只使用 boost::uniform_int<>::operator() .

关于c++ - boost 随机生成器返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44787886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com