计算机的随机数是如何产生的?
2017-03-27 00:00
288 查看
随机数的作用
随机数在我们日常是一个非常常用的东西,无论数据加密还是摇骰子,目的都是要结果不可确定,无论什么结果都存在一定的概率。但是在我们的计算机中随机数到底是怎么产生的?真假随机数产生原理
大部分程序和编程语言确实产生的随机数都是伪随机数,比如像C语言,常常采用线性同余或者通过一个种子产生的伪随机数字,都是存在一定的规律可循。像我们常用的高级编程语言java也是类似。例如java中获取整数某个范围内的数字源码:final int internalNextInt(int origin, int bound) { if (origin < bound) { int n = bound - origin; if (n > 0) { return nextInt(n) + origin; } else { // range not representable as int int r; do { r = nextInt(); } while (r < origin || r >= bound); return r; } } else { return nextInt(); } }
这也就证明了如果知道了这些种子,或者根据已经产生的随机数字,就能够预测下一个可能产生的数字。
说到这里,我们反过来想一想,真正的随机数真的不存在吗?像银行就经常提示大家密码不要用自己的生日,身份证号中某几位数字或者自己的手机号,因为这样随时可能存在被破解的可能,我们要尽量使用一些随机数字,比如说某个路口,在第一分钟走了几个人作为你密码的第一位,然后依次排列,这个数字就是随机的。同样我们的计算机如果单纯依赖于程序,可能就不存在真正的随机数,如果把计算机软件和外部硬件结合起来。比如说收集CPU每天转速以及温度,甚至某个人敲打键盘的频率,磁盘写入速度,等等信号。这样也就产生了“纯粹“的随机数。
unix操作系统也就存在一个熵池,通过熵池来收集一些随机值,这样也就产生了真正意义上的随机数字。
如有问题请微信扫码回复
相关文章推荐
- 如何产生一个随机数
- vc++中如何产生随机数
- vc++中如何产生任意区间的随机数
- VC++中如何产生一个随机数?
- VC中如何产生随机数
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- 如何在GPU上产生随机数
- Java中如何产生随机数
- 由计算机产生0-9之间的随机整数,用户输入猜测的数据,统计用户猜测的次数。产生随机数可以使用Math.rangom()静态方法,该方法返回正的double类型浮点数位于(0.0 1.0】间。
- 使用C++如何产生32位随机数
- 如何产生固定的随机数(VBA)
- 如何产生6+1的随机数
- 如何产生固定的随机数(VBA)
- Java中如何产生随机数
- ORACLE 如何产生一个随机数:DBMS_RANDOM
- 在VC下如何产生随机数?
- J2ME如何产生随机数
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- 总结:关于如何产生几个不同随机数的问题(C/C++)
- 如何在GPU上产生随机数