使用用户定义的随机生成器运行std :: normal_distribution

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)

R. *_*des 5

对的,这是可能的.只需使其符合统一随机数发生器的要求(第26.5.1.3段第2和第3段):

2 G如果表116中所示的表达式有效且具有指示的语义,并且G满足本节的所有其他要求,则类满足统一随机数生成器的要求.在该表和整个本节中:

a)T是由G’s associatedresult_type` 命名的类型,和

b)g是一个值G.

表116-统一随机数发生器要求

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().                |
Run Code Online (Sandbox Code Playgroud)

3以下关系应成立:G::min() < G::max().