C:生成中的任意精度随机数,用于蒙特卡罗模拟,无大气噪声

时间:2010-05-23 22:03:07

标签: c random simulation gmp

我知道还有其他类似的问题,但是下面的问题涉及用于蒙特卡罗模拟的C中的任意精度随机数生成。

当大气噪声并非总是可用时,我们怎样才能在C中生成高质量的任意精度随机数,而不依赖于会造成瓶颈的磁盘i / o或网络访问?

libgmp能够生成随机数,但like other implementations of pseudo-random number generatorsrequires a seed。正如手册中提到的那样,“系统时间很容易猜测,因此如果需要不可预测性,那么绝对不应该是种子价值的唯一来源。”

是否有可移植/移植的库用于生成随机数或随机数的种子? libgmp还提到“在某些系统上有一个特殊的设备/ dev / random,它提供了更适合用作种子的随机数据。”但是,/dev/random/dev/urandom只能在

3 个答案:

答案 0 :(得分:2)

根据定义,真正的随机数需要来自现实世界的混乱信息。 / dev / random经常(但不总是)提供此功能。 * ix的另一个选项是Entropy Gathering Demon。设计/ dev / urandom会愉快地提供非随机数据,因为它在熵池耗尽时不会阻塞。

提供此功能的互联网API包括HotBits(放射性衰变),LavaRnd(CCD)和Random.org(大气噪音,我意识到您不需要)。另请参阅Hardware random number generator

device(无关联)包含Windows和* ix的驱动程序。

答案 1 :(得分:2)

不要过高估计种子的重要性。

首先,它不需要真正混乱 - 只有良好的分布并且不与模拟或伪随机生成器中的任何进程相关联。

其次,对于蒙特卡洛统计特征而言,不是特定数字的随机性(在任何意义上)。

高精度时间的低字节或键盘鼠标操作的某些衍生物为将要在普通PC上运行的任何东西提供了良好的种子。

答案 2 :(得分:0)

为什么你的任意精度要求?没有“0到无穷大之间的随机数”。你总是需要一个范围。