基础知识
随机数,按应用范围大致分为真随机数
和伪随机数
两种;
其中,真随机数是基于物理现象
产生的,比如日常中的抛硬币、掷骰子等,放到计算机场景下,可以是获取cpu频率与温度的不确定性、声卡的底噪等,因为获取方式复杂,所以只在密码学
等特殊场景使用;伪随机数,本质是依赖于统计学伪随机性;
伪随机数具有以下特点:
- 具有类似真随机数的统计特征,如
均匀性
等; - 使用确定性的算法计算得到的
服从[0,1]均匀分布
的随机数序列; - 计算过程依赖
初值(种子)
,常使用系统时间
替代;
示例代码
/*
描述:
获取[0, RAND_MAX]范围内的伪随机数
*/
int create_rand_number()
{
srand(time(NULL));
return rand();
}
/*
描述:
获取[left, right]范围内的伪随机数,这种基于比例的生成方式,可以避开RAND_MAX限制
参数:
@param left 范围区间左边界
@param right 范围区间右边界
*/
int create_rand_number_v2(int left, int right)
{
int random_num = create_rand_number();
double range_percent = 1.0 * random_num / RAND_MAX;
double range_random_num = (right - left) * range_percent + left;
return round(range_random_num);
}