📅  最后修改于: 2023-12-03 15:13:59.914000             🧑  作者: Mango
在编写程序的过程中,随机数是一种非常常见的需求。在 C++ 中,我们可以使用标准库中的 rand()
函数来生成随机数。但是 rand()
函数所生成的随机数范围是固定的,只能生成 0 至 RAND_MAX(通常是 32767)之间的随机数。如果需要生成指定范围内的随机数,则需要进行一些额外的工作。
如果需要生成指定范围内的整数随机数,可以使用以下方法:
#include <cstdlib>
#include <ctime>
int getRandomNumber(int min, int max) {
static const double fraction = 1.0 / (RAND_MAX + 1.0);
return min + static_cast<int>((max - min + 1) * (rand() * fraction));
}
int main() {
// 初始化随机数生成器
srand(static_cast<unsigned int>(time(nullptr)));
// 生成 1 至 6 之间的随机数
int randomNum = getRandomNumber(1, 6);
// 输出随机数
std::cout << randomNum << std::endl;
return 0;
}
其中,getRandomNumber()
函数中的 min
和 max
参数指定了所需随机数的范围。首先,我们使用 RAND_MAX
计算出一个 0 至 1 的随机小数值 fraction
,通过将 rand()
函数的返回值乘以该小数值可以得到一个 0 至 1 之间的随机数。然后,将该随机小数值乘以指定范围的大小,再将其转换成整数型并加上最小值,就可以得到指定范围内的随机整数。
如果需要生成指定范围内的浮点数随机数,则需要对上述方法进行一定的修改。以下是生成指定范围内的双精度随机数的示例代码:
#include <cstdlib>
#include <ctime>
double getRandomDouble(double min, double max) {
static const double fraction = 1.0 / (RAND_MAX + 1.0);
return min + (max - min) * (rand() * fraction);
}
int main() {
// 初始化随机数生成器
srand(static_cast<unsigned int>(time(nullptr)));
// 生成 0.0 至 1.0 之间的双精度随机数
double randomDouble = getRandomDouble(0.0, 1.0);
// 输出随机数
std::cout << randomDouble << std::endl;
return 0;
}
与生成整数随机数的方法类似,我们首先计算出一个 0 至 1 之间的随机小数值 fraction
,然后将其乘以所需范围内的大小,并加上最小值即可得到指定范围内的双精度随机数。
在 C++ 中生成指定范围内的随机数,需要先生成 0 至 1 之间的随机小数值,然后将其乘以所需范围的大小,并加上最小值即可得到指定范围内的随机数。同时,在使用 rand()
函数生成随机数时需要注意线程安全性,建议使用 C++11 中新增的随机数库来代替 rand()
函数。