在srand(time(NULL));
的行上调用srand需要设置rand()
的种子以生成随机数。
我的问题是种子需要什么?
答案 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_seed
和random_number_from_seed
是纯函数,它们只使用它们的参数而不访问任何全局变量。)
这意味着如果种子始终为0,则rand
调用返回的一系列值将始终相同。为了允许不同的值,在每次运行中使用不同的种子。运行之间可以轻松使用的一件事是程序的开始时间。
答案 3 :(得分:0)
如果你不添加srand(),每次运行你的程序时,rand都会生成相同的随机数。