计算机生成随机数的一种方法
2011-04-30 16:46
309 查看
这里介绍一种利用计算机生成随机数的方法,微机都有系统计数器记录自运行开始以来的脉冲数,这是个规律变化的数字,只用它是不能产生随机数的,但是如果我们对计数值进行随机采样则可以得到随机数输出,方法是借助一个性能优良的随机函数,例如我们要生成N个随机数,我们建立N次循环,在循环内用函数读取系统计数值作为随机函数的种子(也许不止一个),然后将随机函数的值作为输出。这样循环结束就可以得到N个随机数了。
计数值采样函数,只用低32位值就够了,高位变化缓慢没有利用价值。试验证实即便是连续采样也不会读到相同的数值,所以不同循环内的读值更不同了。由于采到的计数器值是千变万化的,所以随机函数的种子是千变万化的,随机函数的输出自然也是千变万化的。方法虽然使用了随机函数,但和这个随机函数所能提供的随机序列毫无关系,只是间接利用而已,这样生成的随机序列是没有周期的,永不重复的。
以字节为单位的随机数组输出,在一般微机上能达到超过40M字节/s的输出。实验证实结果数组各元素是独立的,经多次差分处理数据依然是毫无规律的。
计数值采样函数,只用低32位值就够了,高位变化缓慢没有利用价值。试验证实即便是连续采样也不会读到相同的数值,所以不同循环内的读值更不同了。由于采到的计数器值是千变万化的,所以随机函数的种子是千变万化的,随机函数的输出自然也是千变万化的。方法虽然使用了随机函数,但和这个随机函数所能提供的随机序列毫无关系,只是间接利用而已,这样生成的随机序列是没有周期的,永不重复的。
以字节为单位的随机数组输出,在一般微机上能达到超过40M字节/s的输出。实验证实结果数组各元素是独立的,经多次差分处理数据依然是毫无规律的。
相关文章推荐
- JAVA/ 将任意数组内的值乱序(生成随机数)的一种方法
- 生成真随机数的一种方法
- [算法][随机数]一种生成2个不相同的随机数的方法
- 控制随机数生成概率的一种解决方法
- 控制随机数生成概率的一种解决方法
- 控制随机数生成概率的一种解决方法
- 控制随机数生成概率的一种解决方法
- 生成均匀“随机数”,一种生成均匀分布数字的简单方法
- 利用Math.Random()方法来生成随机数。(转)
- 多线程中生成随机数序列重复问题的解决方法
- iOS中的生成随机数方法
- Python生成任意范围任意精度的随机数方法
- C#生成随机数的三种方法
- 利用SQL存储过程生成程序编号的一种方法
- C#生成设置范围内的Double类型随机数的方法
- C#生成不重复随机数的方法
- 生成不重复随机数的一种算法。
- 一种根据URL参数条件动态生成URL的方法
- 随机数的生成方法_2
- php生成随机数的三种方法