无论是c,c++,java以及其他的一些高级语言,其自带的库都提供了对于随机数的生成方法。这里将从下面几个方面论述。
一:简单的模拟一下“随机数"的生成
二:java实现随机数的几种方法
三:java生成伪随机数的源码分析
简单的模拟一下“随机数"的生成
我们知道,计算机都是按一定的程序来执行得,如操作系统程序对电脑的一些操作等,可见,计算机并不会真正的凭空产生数。看下面一组数据:
0.466
0.545
0.836
0.275
0.006
0.205
0.976
0.335
0.746
0.665
0.316
0.195
0.686
0.925
0.856
0.855
0.826
0.985
0.596
看起来像是随机生成的一组数据,其实它只是根据下面这段代码生成的:
public class myRandom {
private double Seed;
public static void main(String[] args) {
myRandom r= new myRandom(15);
for(int i=0;i<999;i++){
System.out.println(r.Next());
}
}
public myRandom(int Seed){
//随机数种子
this.Seed=Seed;
}
public double Next(){
double next=(29*Seed+31)%1000;
Seed=next;
return next/1000;
}
}
初始的时候默认一个随机数种子,即初始值,每次进行一个
(29*Seed+31)%1000
这个方法,即线性同余的方法,每次产生伪随机数的种子为上一次的值,当然第一次为默认。这样看起来似乎可以生成一些随机数。当时知道想一下就会知道,如果某一次取余之后的结果之前已经出现过,那么就会出现一段相似的数据: