4.0 KiB
4.0 KiB
title | localeTitle |
---|---|
Random Functions | 随机函数 |
- 随机数是将随机化引入程序的便捷方式。例如,如果你想运行任何模拟或玩游戏,删除数组的随机索引等,那么随机数就是要走的路。
- 要包含在c ++中使用随机数的头文件是
cstdlib
。 - _专业提示: -_您可以使用
cpp #include<bits/stdc++.h>
来包含所有头文件中的所有函数。
功能: - rand()
- 返回从0到RAND _MAX_的伪随机数(整数) 。不接受任何争论。 - RAND MAX是允许的最大整数。它是编译器依赖,通常是2147483647。
以下是一个例子: -
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
return 0;
}
/*
Output:- (Note that the output is random and will differ from what is mentioned here)
1804289383
846930886
1681692777
*/
现在,再次运行该程序。然后再次。然后再次。你看到了什么? 一次又一次地打印相同的输出。
让我们回到rand()函数的定义: -
rand(): - 返回从0到RAND_MAX的伪随机数(整数)。不接受任何争论。
那么什么是伪随机数?
- 顾名思义,一个非真正随机的数字是伪随机数。
- 伪随机数不是加密安全的,容易受到攻击。
- 在C ++的上下文中,数字看起来是随机的,但不是真正随机的。该函数假定从0到RAND_MAX的每个数字都具有相同的可能性并吐出一个数字。 (事实上, 事实并非如此,但它很接近)。例如,数字5几乎用于所有地方。如果随机数吐出5,您可能认为该数字不是随机的。
- 随机函数rand()占用一个非常大的数字,通过一个大的素数应用模数,并对数字进行各种操作并返回一个值。无论多么复杂,它仍有可能打破它。
我们如何在每个程序执行时获得一组独特的随机数?
我们使用void srand(int seed)
;
- “种子”是赋予一个数字的名称,使得随机序列生成器每次都在不同的起始点开始。这可确保随机函数在程序运行期间不会吐出相同的值。
- 重要的是只在程序开始时调用sCE调用ONCE。
- 不需要重复调用来播种随机数生成器(实际上,它会使您的数字不均匀 分散式)。
- 一种常用的技术是使用时钟为随机数生成器播种,因为每次看时它都会为您提供不同的输出。因此,对于种子,您可以获取时间输出并将其插入随机数生成器。
- time()函数将返回计算机的时间。这表示为数量 自1970年1月1日(大纪元)以来已经过去的秒数。
- 函数时间(NULL)将返回计算机时间内经过的秒数。
- 时间函数必须包含的头文件:`ctime'。
代码段:
#include <ctime>
srand(time(NULL));
cout << rand();
/*
Output: (Will differ from computer to computer, and because of the seed, will also differ from time to time, literally. :D)
1696269016
*/
每次运行程序时,这会产生不同的值。
额外奖励:根据您的方便调整兰特()。
-
由于rand()返回一个从0到RAND_MAX的随机数,如果你想要一个0到8之间的数字,那么 -rand()%9。 任何模9的数字都将返回0到8之间的值。
-
更正式的是,如果你想要一个L(包括)和U(包括)之间的数字,你必须这样做
int num = L + rand()%(U-L+1).
说明: - rand()%(UL + 1)返回0和(UL)的随机(伪随机,别忘记)数字。因此,添加L确保我们得到L和U之间的值。摘要:-
-
int rand():返回0到RAND_MAX之间的随机数。
-
void srand(int seed):用于为随机数生成器设定种子。仅调用此函数_一次_就足够了。
来源: - 随机数生成