【发布时间】:2015-03-19 15:54:35
【问题描述】:
我试图生成 100 个从 0.0 到 1.0 的均匀随机变量。 我使用基于时间的种子来生成它,但生成的数字在更改为另一个之前似乎重复了几次。有没有更好的方法来模拟而不重复?
输出如下: 0.33456, 0.33456, 0.33456, 0.11256, 0.11256, 0.11256, 0.94092, 0.94092, ...
Real UniformDistributionGenerator(double range_from, double range_to) {
Real uniform_r_v = 0.0;
unsigned seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
std::mt19937 generator(seed);
std::uniform_real_distribution<double> distribution(range_from, range_to);
uniform_r_v = distribution(generator);
return uniform_r_v;
}
【问题讨论】:
-
您正在重新播种具有相同时钟值的确定性 RNG(
time_since_epoch仅具有毫秒分辨率)。您应该在UniformDistributionGenerator函数的 outside 中保持 RNG 状态。还可以考虑使用better random number generator,以及比毫秒时间更好的种子。
标签: c++ visual-studio random