一个范围内的成功随机数

Succesive random numbers in a range

本文关键字:成功 随机数 范围内 一个      更新时间:2023-10-16

我有以下代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
int getRandomNumber(int min,int max)
{
    static const double fraction = 1.0/(static_cast<double>(RAND_MAX)+1.0);
    return static_cast<int>(rand()*fraction*(max-min+1)+min);
}
int main()
{
    srand(static_cast<int>(time(0)));
    std::cout<<getRandomNumber(1,6);
    return 0;
}

如果我成功运行此程序,则得到相同的数字。但是当我使用 cout 语句运行这个时:

std::cout<<getRandomNumber(1,6)<<getRandomNumber(1,6);

我每次都得到不同的数字。这怎么可能呢?我错过了什么吗?

time()函数以为单位返回时间,因此在同一秒内运行程序两次或更多次将导致随机数系统以完全相同的数字播种。

当使用函数 time() 作为种子并在短间隔内运行程序时,与 RAND_MAX 相比,rand() 的第一个结果将更改非常小的数量。

这就解释了为什么当使用分数得到 1 - 6 之间的数字时,你会得到相同的数字。

这是另一种从 1 到 6 获取随机数的方法,这可能会做得更好。

rand() % 6 + 1