使用生成器和发行版随机扩展c ++ 11的教程或示例代码

时间:2012-07-30 07:55:51

标签: c++ visual-studio-2010 random stl c++11

我编写了传统的C ++代码,用于生成统一的随机数和高斯分布。它实现了George Marsaglia博士非常快的算法。 (我正在使用它们为蒙特卡洛高维集成生成各种样本。)

我认为重新考虑生成器和分发以使用新的C ++ 11 std :: random方案是个好主意。

有人能指出我对std :: random的教程或一个很好的参考,包括如何扩展它的必要信息吗?示例代码是理想的。

更新。谢谢大家的帮助。我现在已经为Visual C ++ 2010附带的std :: normal_distribution写了一个替代品。在我的机器上,当由默认引擎提供时,替换速度提高了26%。我有点失望,差异不大,但嘿,这是我的问题。 : - )

2 个答案:

答案 0 :(得分:5)

N3376是最新的C ++标准草案(这是后C ++ 11,但它是C ++ 11的优秀快照)。

C ++ 11-random所有内容:26.5随机数生成[rand]

26.5.1.4随机数引擎要求[rand.req.eng]具有统一随机数生成器需要满足的所有要求。

26.5.1.6随机数分布要求[rand.req.dist]具有高斯分布需要满足的所有要求。

26.5.8.5.1类模板normal_distribution [rand.dist.norm.normal]是描述std定义的高斯分布的部分。

C ++ 11 <random>非常像STL,因为它设置了随机数生成器(容器)和随机分布(算法)的要求,然后客户端可以混合和匹配这两者。这是一个非常酷的设计。

抱歉,我不知道一个好的教程。 C ++标准是一个很好的参考和糟糕的教程。然而,你显然在随机数领域受过良好教育。所以假设你对C ++有所了解,那么C ++标准可能不会太糟糕。

如果您想仔细阅读其源代码,可以使用<random>的开源实现(例如)。一个例子是libc++。他们所要求的是,如果您重复使用他们的任何代码,您将保留其版权声明。

修改

是唯一有资格编写本教程的人。 : - )

答案 1 :(得分:1)

你可以通过阅读boost库来学到很多东西,因为C ++ 11中的很多提议都是从boost中采用的。

在这里查看示例rng引擎的界面:

http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine

我首先要实现min max seed和operator()函数,看看它是否作为C ++ 11的有效引擎传递