我正在寻找一种方法来生成伪随机数序列,这将为任何平台上的给定种子产生相同的序列结果.我假设rand()
/ srand()
不会保持一致(我对这个假设很容易出错).
rlb*_*ond 19
类似Mersenne Twister(来自Boost.Random)的东西是确定性的.
我意识到这是一个旧线程,但现在使用C++ 11,有一大堆新选项可用.以下是页面中的一个提取示例,默认使用Mersenne Twister
引擎和Normal
分发:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
int main()
{
std::random_device rd;
//
// Engines
//
std::mt19937 e2(rd());
//std::knuth_b e2(rd());
//std::default_random_engine e2(rd()) ;
//
// Distribtuions
//
std::normal_distribution<> dist(2, 2);
//std::student_t_distribution<> dist(5);
//std::poisson_distribution<> dist(2);
//std::extreme_value_distribution<> dist(0,2);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::round(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)