增强随机发电机返回相同的值
Boost Random Generators returning identical values
不使用C 11 Random
寻找助推随机专家...我需要在许多不同范围之间生成随机数。我写了以下功能:
#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
与上述相同的事情发生在浮点功能中。有什么办法可以完成使用Boost Random Distro的尝试做的事情?
boost::variate_generator
的构造函数看起来像这样:
variate_generator(Engine e, Distribution d);
- 意味着它不会改变传递的m_oRng
的状态,而是将其复制。
我建议省略variate_generator
并仅使用boost::uniform_int<>::operator()
。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 使用std::mt19937从字符串中返回一个随机单词
- C++随机uniform_int_distribution在所有线程中返回相同的值
- 动态数组传递给 main 中用随机值填充的函数,返回值3221226356
- 从基于属性的列表中返回随机对象
- DoModal 主应用程序随机返回 -1 代码
- 增强随机发电机返回相同的值
- 尝试以随机字符(长读取)打印字符串返回结果
- 随机函数在循环中调用时返回相同的数字!C++
- 为什么从函数返回c弦乐会导致随机字符
- C 从向量的子集返回一个随机值
- 打印链表返回随机符号
- 随机返回相同的循环值
- SDL_GetWindowFlags() 返回看似随机的值
- 随机字符作为在样本中使用 libaws 时返回
- 返回随机字符串
- 如何在 c++ 中从枚举返回随机元素
- mmap无法按预期工作(返回随机0xdeadbeef)
- CryptDecrypt在解密字符串的末尾返回随机字符
- 以C++返回随机值的函数。找不到问题