Rand随机数函数的使用
Rand()函数简介
Rand函数返回值 | 0~C++中所能表示的无穷大 |
Rand函数返回值类型 | Unsigned int型无符号整型变量 |
Rand函数的参数 | 无 |
Rand()函数如何产生指定范围内的随机数?
#include <iostream>
using namespace std;
int main()
{
unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值
cout << random << endl;
}
问题来了,我们每次运行得到的结果都一样,难道这个不是随机数吗?为什么没有随机的性质?
Srand()初始化随机数种子函数的使用
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
srand(2);
unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值
cout << random << endl;
}
我们会发现,改变srand(InputVar)中输入参数的值,可以产生不同的随机数结果,但是问题又来了:每一个随机数种子对应一个特定的随机数,这样的随机数也不具有随机的属性呀?
Time函数的使用
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值
cout << random << endl;
}
这样我们所输出的random才是真正的随机数,这是为什么呢?
Time(NULL)的作用 | 返回从1970年1月1日0时0分0秒到现在的秒数 |
因此,当时间每分每秒的过去,我们的time(NULL)返回值也会出现不同,由于返回值不同,srand(InputVar)产生的随机数种子也不同。
如何产生0~1的随机数?
我们有以上程序可以得到0~a之间的任意随机无符号整数,那么我们可以通过除以10^n的形式,将整数转化为小数:
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
float random = (float)(rand() % 100) / 100; // 由取余和除法的性质可知,这会产生0~1之间的任意无符号小数
cout << random << endl;
}
但是我们需要注意的是:我们必须要将rand()%a进行强制类型转换,否则默认返回值为unsigned int型。