【问题标题】:How bad rand from stdlib.h is?stdlib.h 中的 rand 有多糟糕?
【发布时间】:2011-07-28 17:07:04
【问题描述】:

我正在用 C++ 进行蒙特卡罗模拟,并且我使用 Boost 来处理随机数。我也用过 GSL。但事实证明随机数生成是我最大的运行时效率低下之一,所以我刚开始使用来自cstdlib 的旧rand()

我的模拟中随机数属性差的风险有多严重?我使用大约 10^6 或 10^7 个随机数样本。

【问题讨论】:

  • 您在发布之前是否阅读了about-rand- 中的答案:?)尤其是 Martin v. Löwis 的答案产生了一些细节。带有period of rand.c 的简单谷歌查询显示在第一页上。糟糕的实现和从保证至少为 32767 的范围内挑选 10^6 个数字并不是我的第一选择。这些 Mersenne-Twister 实现发生了什么?在速度和长时间之间不是一个很好的折衷方案吗?

标签: c++ random std gsl boost-random


【解决方案1】:

有两个问题:(1) 因为 RAND_MAX 只能保证至少为 32767,所以可能的值可能并不多(对于某些应用程序来说不一定是坏的),以及 (2) 实现不佳。

如果您需要所谓的安全随机数生成器,则需要寻找其他地方。但是对于很多应用来说,rand() 就足够了。

解决您的问题的博文是http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx

【讨论】:

    最近更新 更多