随机数学习笔记
摘要: 本文记录我第一次碰到随机数时,之后进行一些资料查阅时的笔记,以便以后碰到时快速查阅。根据我目前的了解,要想查询相关的资料,可从以下几个方面入手:密码学1,计算机模拟2,统计模拟。
实用部分
基本函数
srand() : void srand(unsigned int seed) //提供种子seed,可以使用srand((unsigned int)(time(NULL)))来初始化种子,使得每次产生的随机数序列不一样
注: 系统默认的种子为1rand() : 获得在上述种子情况下,随机序列中的元素,默认情况下随机数范围为0 ~ RAND_MAX之间的整数,其中RAND_MAX大小为32767。
包含头文件
#include<stdlib.h> //添加这个才可以调用srand()和rand()函数
#include<time.h> //添加时间函数之后就可以使得每次随机值不重复出现
- 产生随机整数
rand() : 产生0 - RAND_MAX之间的整数
rand()%(b-a)+a : 产生[a,b)之间的随机整数
rand()%(b-a+1)+a : 产生[a,b]之间的随机整数
rand()%(b-a)+a+1 : 产生(a,b]之间的随机整数a+(int)b*rand()/(RAND_MAX+1) : 另一种表达形式,产生[a,a+b)之间的整数
注: 本质其实就是模运算而已,参考资料7倒数第二行表述不清晰
- 产生随机浮点数
rand()/double(RAND_MAX) :产生[0,1]之间的浮点数
更进一步,通过模运算可以得到想要的区间的浮点数
产生给定分布的随机数具体请参阅资料 [6]
相关参考资料:
- 计算机程序设计艺术.第二卷.第三章
- 统计建模与R软件-薛毅-清华大学出版社2006-第十章
- Statistical Models.A.C.Davison Cambridge University Press -Chapter3.3
- Matlab中的伪随机数原理
- Random numbers: Lecture of Computational Physics—UTexas
- C++中某个实数区间均匀分布的用法
- C/C++中产生随机数(rand,srand用法)
脚注: