为什么在使用rand生成随机数之前需要调用srand

时间:2015-02-04 20:39:17

标签: c++ c

srand(time(NULL));的行上调用srand需要设置rand()的种子以生成随机数。 我的问题是种子需要什么?

4 个答案:

答案 0 :(得分:4)

rand()函数是伪随机数生成器,即

  

rand()函数返回0到RAND_MAX(含)的伪随机整数

伪随机数的生成取决于种子。如果您没有提供与种子不同的值,那么您将在应用程序的每次调用中获得相同的随机数。这就是为什么,srand()用于随机化种子本身。

最常见的做法:srand(time(NULL)) [适合单次评估]。

  

[explicit] 种子需要什么?

值得一提的是,来自man page

  

如果未提供种子值,则rand()函数将自动播种,值为1.

答案 1 :(得分:3)

我猜你的问题是为什么它不会自动播种不可预测的值(比如当前时间)。

每次程序启动时随机数生成器生成相同的序列可以方便调试。

答案 2 :(得分:1)

随机数生成是迭代过程的结果。每次调用rand时都会发生以下情况:

seed := create_new_seed(seed);
return random_number_from_seed(seed);

(注意create_new_seedrandom_number_from_seed是纯函数,它们只使用它们的参数而不访问任何全局变量。)

这意味着如果种子始终为0,则rand调用返回的一系列值将始终相同。为了允许不同的值,在每次运行中使用不同的种子。运行之间可以轻松使用的一件事是程序的开始时间。

答案 3 :(得分:0)

如果你不添加srand(),每次运行你的程序时,rand都会生成相同的随机数。