标签:重复数 函数 公式 执行 srand 范围 产生 计算机 随机
本篇随笔主要介绍C++的随机数生成函数;
随机数生成函数的思想:
C++的随机数生成函数的结果其实不是随机数,虽然它的名字是“随机数”,但它的实际的更准确的含义应该是“看似随机但实则可预测的数”;
一个随机数实际上是一条数列的其中一项,随机数数列不是常见的等差或等比数列;
一个简单的随机数数列的递归公式为:R1=(R0*7)%11
设定R0,该值也被称为“种子值”,为1
可得该随机数数列为1,7,5,2,3,9,8,1,...
这个简单的随机数数列很快就遇到了重复数字
我们可以定义一个更复杂的公式来避免随机数数列过早地出现数字的重复;
定义一条随机数数列的公式往往各不相同,每一个随机数生成函数都可以使用一条专属于它的随机数数列公式;
在C++里,虽然不同的随机数生成函数内部的具体公式不同,但它们的思想是相似的;
C++随机数生成函数的具体函数:
rand();
该函数被预定义于cstdlib库;
该函数不接受参数,返回一个在0到RAND_MAX之间的常数;
RAND_MAX是一个被预定义在cstdlib库的常数;
srand(unsigned int);
该函数被预定义于cstdlib库;
该函数接受一个正整数作为参数,不返回值;
该函数所接受的参数作为rand()函数的种子值,不同的种子值使得rand()产生不同的随机数数列;
time(0);
该函数被预定义于ctime库;
time(0)返回一个正整数;
在大多数计算机中,这个正整数是,从1970年1月1日00:00:00到执行该time(0)函数的那一刻,所经过的秒数;
C++随机数生成函数的实际应用:
srand(time(0));
...
int a = ( rand()%7 ) + 2 ;
//rand()%7所产生的随机数的范围是0到6
//a的范围是2到8
通过调整上面的例子中的a的声明中的“7”和“2”所在位置的具体整数数值,可实现a的任意整数随机数范围;
rand()函数往往被置入一个循环中使用,但切勿将srand(time(0))也置入循环中,防止出现重复使用同一个种子值且重复返回该种子值的情况;
标签:重复数 函数 公式 执行 srand 范围 产生 计算机 随机
原文地址:https://www.cnblogs.com/jiawei186/p/13912505.html