c++ 随机数

在c++中使用stdlib.h 中的rand()函数输出伪随机数数列。

srand(unsigned int):给rand函数一个种子,使其初始化。一般用srand((unsigned int)time(NULL));,使用当前时间来初始化。

rand();随机数生成函数,可以输出随机数列,在一个种子下共有65535个,则之后会重复出现。位于stdlib.h中。rand_max为0x7fff,但输出时最大值为32765


实现随机数的方法有两种,一种通过一个确定性算法实现的伪随机数生成,一种是选取真实世界的自然随机源来生成的真随机数。

真随机数要需要特别的系统函数或者硬件电路来换取真随机源的信息,如 计算机网络中IP包到达的时间,随机噪音,计算机当前的秒级时钟,键盘反应的时间,热噪声,操作系统的进程信息,光量子的偏振等。真随机数效率较低,一般在程序使用伪随机发生器产生的伪随机数。



常用的伪随机生成方法为线性同余法:

随机数序列{Xn} 由以下式子迭代得到:

Xn+1    =   ( a * Xn + c  )  mod  m ,  n>= 0

X0为种子,且  0 =< X0 <m ;

常数m为模数,m >0 。

常数a为乘子, 0=<a<m。

参数c为增量, 0=<c<m

一个好的线性同余法的取值使其能产生高质量的随机数。要使其满周期,即使其周期数等于为m。一般选择m=2^l,l为使用数据类型的比特数,如使用int时,为32,这样会使周期很大,且整数溢出,不用进行模操作。然后要使其满周期,则a = 4A +1,b = 2B + 1 , A,B为任意的正整数。X0一般取当前时钟值。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值