如何用 C++ 创建随机数发生器

在本文中,我们将讨论在 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的基本原理在于一些计算提供不同的数字,这些数字似乎是随机的。

我们希望这篇文章对读者来说是可以理解的,随时随地评论下面的任何问题或建议。

Published At
Categories with 技术
Tagged with
comments powered by Disqus