srand函数如何与时间函数相互作用
How does the srand function interact with time function?
我很困惑-我有下面的代码-最小值和最大值是我们的范围值。据我所知,srand函数取一个值——种子值,并返回一个伪随机整数。首先,什么是伪随机整数?
// Constants
const int MIN = 50;
const int MAX = 450;
// Get the system time.
unsigned seed = time(0);
// Seed the random number generator.
srand(seed);
// Generate two random numbers.
int num1 = MIN + rand() % MAX;
int num2 = MIN + rand() % MAX;
我们还需要初始化一个时间值吗?我们可以简单地调用时间函数吗?我相信时间函数会返回一些类似于部分秒的东西——创建我们的随机#?我通常对随机#是如何生成的感到困惑。
感谢
"伪随机整数"意味着它是由函数生成的(因此在理论上是可预测的),但要区分输出和真正的随机值并不容易(例如,如果猴子从袋子里拿走0-9中的一个数字,然后再把它扔回去)。当然,这取决于伪随机函数的好坏。顺便说一句,标准的C/C++rand()
对于"严肃"的加密内容来说还不够好。
如果您不使用种子初始化srand
,那么您将始终从数字生成器获得相同序列的输出值。之所以使用时间值,是因为假设"部分秒"部分是相对随机的(而且获得时间值相对便宜)。
这是一种确保每次运行都获得不同随机数序列的方法,因为(可能)每次运行的时间()都会有不同的值;您可以(过于简单地)将种子视为该序列的起点。
伪随机数是通过算法产生的一系列确定性(即非随机)值。历史上,一种常见的方法是使用一个简单的递归关系:Ui=f(Ui-1),其中Ui是整数值。一瞬间的想法告诉你,一旦你看到U的重复值,所有后续值也将是重复的。这意味着序列循环。一个好的生成器是这样一个生成器,其中U看起来是不相关的,在整数范围内均匀分布,并且具有长周期长度。为生成器设定种子包括在循环中选择一个入口点。如果你总是选择相同的入口点,你将总是得到相同的序列。如果您没有明确地选择初始状态(种子值),那么大多数PRNG都有默认的初始化。
多年来,人们认识到,20世纪50年代至80年代常见的递推函数存在各种问题,这使得人们很容易将其与真正的随机性区分开来。更现代的生成器使用比单个整数更大的状态空间,并在每次调用时将高维空间向下投影为单个整数输出。这意味着您可以获得值的单个重复,但在返回到与开始时相同的状态空间之前,不会获得序列的重复。由于状态空间的位数呈指数级增长,这就产生了更长的可用序列。种子设定仍然包括初始化状态空间。
据我所知,srand函数取一个值——种子值,并返回一个伪随机整数。
差不多,但不完全。它只是设定种子并返回无效。CCD_ 3返回一个伪随机整数。
首先,什么是伪随机整数?
伪随机整数是伪随机数生成器的积分输出。伪随机数生成器是一种生成表面随机数序列的算法。
我们还需要初始化一个时间值吗?我们可以简单地调用时间函数吗?
调用time
函数不需要初始化任何内容。
我相信时间函数会返回类似于部分秒的
不偏袒。它返回自epoch以来的秒数。
有关更多信息,请参阅参考文件:
- http://www.cplusplus.com/reference/cstdlib/srand/
- http://www.cplusplus.com/reference/cstdlib/rand/
- http://www.cplusplus.com/reference/ctime/time/
有关伪随机数生成器的基本信息,请参见例如维基百科:http://en.wikipedia.org/wiki/Pseudorandom_number_generator
- rcpp函数中的清理时间很长
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 函数的时间复杂度是多少?
- 在多个时间戳处执行函数
- 如何计算此排序函数的时间复杂度?
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- 如何计算函数的时间复杂度?
- 构造函数的链接时间自动注册
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- C++不重载时间函数,所以我们不需要写 NULL 有什么原因吗?
- 在确定函数的时间复杂度时需要帮助
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 延迟函数使打开的框架窗口冻结,直到指定的时间过去
- 超过了三次函数根平分搜索时间限制
- 用于测量重载运算符和成员函数的时间的函数
- C++ 测量重复调用的函数的时间
- 布尔函数在一段时间内不起作用
- 加泰罗尼亚数字,递归函数时间复杂度
- 什么占用了我的函数时间