在本文中,我们将讨论在 C++ 中创建随机数生成器所需的功能,在计算机世界中,随机数是增加匿名性和安全性的必不可少的组成部分。
一个随机数生成器是创建假冒随机数的支柱。
伪随机数背后的想法是,计算机没有一个思维过程来选择随机数,所以即使生成的输出数似乎是随机的,这些值是数学计算的。
srand() 和 rand() 函数
在 C++ 中, [srand() 函数(/community/tutorials/rand-srand-c-plus)可以执行伪随机数的计算。
1srand(unsigned int seed_value)
借助种子值,‘srand()’设置了由‘rand()’函数生成假随机数的阶段。
1int random = rand();
我们已经完成了生成随机数的简单任务,但是,困难的部分是了解随机数生成器背后的概念。
种子价值的重要性
种子值持有随机数序列的密钥. 如果函数提供相同的种子值,计算的数组将是相似的。
对于srand()
函数的默认种子值为1
,因此,在不提供新鲜种子值的情况下调用一个rand()函数仍然会给我们带来一串随机数字。
一个简单的解决方案是使用新鲜的种子值,每次我们运行该程序. 什么变化每秒? - ** 时间**. 我们使用了当前时刻印的概念是当前的种子值。
您可以通过使用:
1time_t current_time = time(NULL);
current_time
变量持有自1970年1月以来的秒数,此值传递到srand()
函数,然后我们得到一种新鲜的假随机数序列。
我们可以将时刻印的初始化转移到变量,然后简单地将时刻印转移到函数中。
1srand((unsigned) time(NULL));
种子值在程序中提供一次,无论要生成多少个随机数字。
在 C++ 中创建完美的随机数字生成器
下面的代码证明了随机数的正确生成。
1#include<iostream>
2#include<cstdlib>
3using namespace std;
4
5int main(){
6
7 // Providing a seed value
8 srand((unsigned) time(NULL));
9
10 // Get a random number
11 int random = rand();
12
13 // Print the random number
14 cout<<random<<endl;
15
16 return 1;
17}
输出:
11897776064
生成的数字太大,无法在正常计算中正确使用。
在范围内生成随机数
有必要在一定范围内限制随机数,为此特定目的,我们使用模块 %
运算符。
例如,为了生成从0到9的随机数,我们可以使用:
1int random = rand() % 10;
同样,如果我们需要从1到9中获取随机数字,我们会使用:
1int random = 1 + (rand() % 9);
一般方程式可以表示为:
1int random = offset + (rand() % range);
在上面的方程式中:
- offset - 随机数范围 的起点* 范围 - 包括极限在内的第一个和最后一个可能的随机数之间的值数
例如,在10 - 100之间的随机数组中,我们将其抵消为10和范围为91。
让我们运行一个程序的例子,在100到200之间打印5个随机数字。
1#include<iostream>
2#include<cstdlib>
3using namespace std;
4
5int main(){
6
7 // Providing a seed value
8 srand((unsigned) time(NULL));
9
10 // Loop to get 5 random numbers
11 for(int i=1; i<=5; i++){
12
13 // Retrieve a random number between 100 and 200
14 // Offset = 100
15 // Range = 101
16 int random = 100 + (rand() % 101);
17
18 // Print the random number
19 cout<<random<<endl;
20 }
21
22 return 1;
23}
出发点:**
1144
2175
3162
4137
5200
要澄清的是,如果没有提供种子值,上述程序的输出每次我们运行时都将是相同的,尽管集中的随机数字不同,但完整集将是相同的。
随机数生成器(RNG)的应用
随机数生成的功率可能看起来有限,但情况不同,因此,让我们看看RNG的几种用途。
◎ 加密 ◎
不可预测性被认为是加密领域的安全措施,因此,有大量使用随机数字生成器,如密钥和非密码。
【游戏】
传统的游戏包括打牌和打牌来引入游戏的随机性,从而增加了乐趣和不确定的结果,同样,现代游戏开发也有前和后随机性的概念,为游戏增加了额外的维度。
** 随机算法**
在这些算法中,有一定程度的随机性被引入到已知的算法中,最重要的是,这些算法的目的是通过交易成功的概率来实现更好的性能。
结论
RNGs或PRNGs(伪随机数字生成器)是现代网络安全和加密的构建要素,这些RNG的基本原理在于一些计算提供不同的数字,这些数字似乎是随机的。
我们希望这篇文章对读者来说是可以理解的,随时随地评论下面的任何问题或建议。