rand() 是 C++ 中的一个用来产生随机数的函数,它生成的随机数并不是真正的随机数,而是伪随机数。rand() 函数生成的数字是一个介于 0 和 RAND_MAX 之间的整数,其中 RAND_MAX 是在 stdlib.h 头文件中定义的一个预处理指令。
在 C++ 中使用 rand() 函数的时候,有时候需要设置范围,下面我们从多个角度来分析 rand() 函数怎么设置范围。
1. 使用取模运算设置范围
使用取模运算是设置随机数范围最常用的方法,通常使用如下公式:
```
int num = (rand() % (max - min + 1)) + min;
```
其中,max 和 min 是你设置的最大值和最小值。这个公式的本质是将 `rand() % (max - min + 1)` 产生的随机数转换到需要的取值范围内,再加上 min 实现偏移。
需要注意的是,在使用这个公式时,max 和 min 的值要合法,也就是说需要满足 `max > min`。否则,执行这个公式可能会出现不可预测的结果。
2. 使用除法运算设置范围
除法运算是另一种设置范围的方法,可以使用如下公式:
```
int num = (rand() / (RAND_MAX / (max - min + 1))) + min;
```
这个公式的本质是通过除法的方式将产生的数值映射到所需范围内,并加上 min 实现偏移。需要注意,这种方法的效率不如取模运算,但是可以避免“取模偏向”问题。
3. 使用 C++11 的 random 库设置范围
C++11 引入了新的随机数库,即 random 库。这个库提供了更多的随机数操作方式,可以得到更好的随机数分布。如果使用 C++11,推荐使用 random 库来产生随机数。
使用 C++11 的 random 库,可以这样设置范围:
```
#include
#include
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 10);
for (int i = 0; i < 10; ++i)
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
```
上面的代码会生成 10 个介于 1 和 10 之间的随机数。`std::random_device` 是用来产生随机种子的。`std::mt19937` 是一个随机数引擎,它会产生伪随机数。`std::uniform_int_distribution<>` 是一个分布器。它生成位于区间 [a, b] 中的均匀分布的随机整数。
需要注意的是,random 库的效率比较低,但对于对随机性要求较高的场景,可以考虑使用此库。
综上所述,我们介绍了三种设置范围的方法,分别是使用取模运算、除法运算和 C++11 的 random 库。使用哪一种方法,可以根据实际情况来选择。需要注意的是,随机数生成的结果都是伪随机数,不能保证完全随机,因此在使用随机数的场景,需要对结果进行判定和验证。
扫码咨询 领取资料