利用计算机内部计数器生成真随机数原理及实现


一、手动产生随机数方法
  计数器是精密器件不能直接产生随机数,但可以让其为产生随机数服务。每个计算机都有其工作频率称为主频,与之相对应的是时钟周期,下面的程序段
DWORD n;
_asm//嵌入汇编语言
{
rdtsc//读计数器值
mov n,eax//计数器低位值进入n
}
  的作用是读取自开机以来CPU经历的时钟周期数的低32位数值(高位值变化缓慢在此无用)放到变量 n中,每调用一次 n的数值等于其现有数值加上一个增量得到一个和,如果和超过了n的值域则溢出部分放到 n里,实际上是n中的数值是 rdtsc%N,这里用rdtsc表式计数器的值,N表示n的值域也就是2的32次方,%N表示以N为模做模运算。例如主频是2.2GHz,也就是 n的数值每秒增加2.2G,n是DWORD变量取值范围是4.29G,4.29G除以2.2G得到1.95秒,也就是说每过1.95秒 n数值能变化4.29G,小于这个时间间隔读到得可能是相近的数,极端的例子是可能读到相同的数,所以用大于1.95秒的速度读计数器才能得到0到4.29G之间的任何数值,称这个时间间隔是该值域对应的最小时间间隔。可以看到如果我们手动控制以大于1.95秒的时间间隔读取 n的数值,我们将得到4.29G范围内随机数,人为手动控制本身就是随机事件,因为人不具备控制等间隔时间的能力,间隔时间肯定是变化的、不可控制的所以能得到随机数。1.95秒多的时间产生一个随机数未免太慢了,主频一定时,采样时间间隔小时可以产生较小的随机数,关系很简单
        最小时间间隔 = 随机数值域/主频
  例如主频还是上面的2.2GHz,让 n是WORD型变量,可以算出最小时间间隔等于29.8微秒,

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值