【发布时间】:2012-09-30 16:17:24
【问题描述】:
我需要在我的C++ 应用程序中生成random numbers。看了这两篇文章就知道了——
http://www.cprogramming.com/tutorial/random.html
-- 可以使用srand() 和rand() 生成随机数,但在这两种情况下,根据system clock 的当前时间被用作seed。但是我在第一篇文章中读到,如果种子相同,rand() 将创建相同的随机数。因此,如果两个不同的用户同时运行我的应用程序,那么他们将拥有相同的随机数。这将毫无意义,因为我需要随机数在大多数情况下是唯一的。 (我知道如果它们是随机生成的,它们就不能真正 100% 唯一)
所以我的问题是我可以创建一个不基于系统时间的随机种子吗?如果可以,为什么rand() 用相同的种子产生相同的数字,有没有办法让rand() 产生不同的数字相同的种子,还是有其他方法可以生成随机数?
【问题讨论】:
-
不清楚你的需求是什么,你的平台是什么。例如,在大多数 x86 平台上,您可以获得十亿分之一秒的时间测量(来自 TSC),这使得两个用户同时运行您的程序的机会实际上为零。 (您的问题的确切答案在很大程度上取决于您的确切要求和您的平台。)
-
如果没有外部噪声源,您无法生成真正的随机数 - 您能做的最好的就是伪随机数。
-
Kolmogorov complexity 不可计算。
-
您始终可以在
<random>标头中使用更好的选项之一。 -
@DavidSchwartz 函数 time() 是精确的还是我需要使用其他东西?为了回答你的问题,我正在 x86(Linux) 上编写应用程序。