📜  c++ 如何生成一个范围内的随机数 - C++ (1)

📅  最后修改于: 2023-12-03 15:13:59.914000             🧑  作者: Mango

C++ 如何生成一个指定范围内的随机数

在编写程序的过程中,随机数是一种非常常见的需求。在 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() 函数中的 minmax 参数指定了所需随机数的范围。首先,我们使用 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() 函数。