我有以下代码:
#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);
我每次都会得到不同的数字。 那么这怎么可能?我错过了什么吗?
答案 0 :(得分:2)
time()
函数以秒返回时间,因此在同一秒内运行程序两次或更多次将导致随机数系统的种子数完全相同。
答案 1 :(得分:0)
当在短时间间隔内使用函数time()作为种子和运行程序时,与RAND_MAX相比,rand()的第一个结果将以非常小的数量进行更改。
这解释了为什么你使用分数从1到6得到一个数字时得到相同的数字。
这是从1到6获得随机数的另一种方法,可能会做得更好。
rand() % 6 + 1