Din*_*lin 2 c++ random visual-c++ c++11
我即将生成一组正态分布的伪随机数.据我所知,std库提供了以下代码:
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<> d(mean,std);
...
double number = d(gen);
Run Code Online (Sandbox Code Playgroud)
问题是我想使用Sobol'准随机序列而不是Mersenne Twister伪随机生成器.所以,我的问题是: 是否可以使用用户定义的随机生成器运行std :: normal_distribution(在我的情况下使用Sobol'准随机序列生成器)?
更多细节:我有一个名为RandomGenerators的类,用于生成Sobol'准随机数:
RandomGenerator randgen;
double number = randgen.sobol(0,1);
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的.只需使其符合统一随机数发生器的要求(第26.5.1.3段第2和第3段):
2
G如果表116中所示的表达式有效且具有指示的语义,并且G满足本节的所有其他要求,则类满足统一随机数生成器的要求.在该表和整个本节中:a)
T是由G’s associatedresult_type` 命名的类型,和b)
g是一个值G.表116-统一随机数发生器要求
Run Code Online (Sandbox Code Playgroud)Expression | Return type | Pre/post-condition | Complexity ---------------------------------------------------------------------- G::result_type | T | T is an unsigned integer | compile-time | | type (§3.9.1). | ---------------------------------------------------------------------- g() | T | Returns a value in the | amortized constant | | closed interval | | | [G::min(), G::max()]. | ---------------------------------------------------------------------- G::min() | T | Denotes the least value | compile-time | | potentially returned by | | | operator(). | ---------------------------------------------------------------------- G::max() | T | Denotes the greatest value | compile-time | | potentially returned by | | | operator(). |3以下关系应成立:
G::min() < G::max().