以纯粹的方式使用c++随机数生成器

Using c++ random number generators in a pure fashion

本文关键字:c++ 随机数生成器 方式使 纯粹      更新时间:2023-10-16

我有一个类似蒙特卡罗的系统,其中我有一些随机演变的状态,使用内部随机数生成器。我还在程序的其他地方存储了这个状态的const副本,因为我想知道它是如何进化的,如果它真的进化的话。这需要随机数生成器的两件事:

1)克隆生成器而不修改它的能力,以存储在复制版本的状态。

2)从生成器的const副本中确定下一个随机数的能力。

仅使用标准库可以吗?如果没有,你能推荐一个第三方库吗?

标准c++ 11随机生成器是可以复制的普通对象,并且复制将产生相同的序列。它们还可以使用operator<<operator>>将它们的内部状态序列化和反序列化成io流。

生成随机数的operator()不是const函数,因为它改变了生成器的内部状态。因此,您不能在生成器的const副本上直接调用它。但是,您可以创建const的临时可变副本,从中生成一个值,然后销毁它。

如果你的编译器不支持c++ 11,你可以使用Boost。随机库,它是标准库的基础。