随机数生成器在通信、加密、图像传输等领域应用广泛,且一般起到关键性作用。我在最近设计的一个近场射频通信协议的碰撞避退算法的过程中,便对此有深深体会。
2、伪随机数发生器随机数发生器一般包括伪随机数发生器和真随机数发生器。伪随机数发生器的伪随机序列是由数学公式计算产生,如果生成随机数的算法确定了,那么这个随机数序列也就确定了。所以从数学意义上讲,伪随机数并不随机,序列本身也必然会重复。但是只要伪随机数发生器所产生的伪随机序列的周期足够成并且通过相应的检验,就可以在一定范围内使用。而且伪随机数发生器在物理实现上比真随机数简单的多,它的生成速度比真随机数快得多,因而广泛被使用。对伪随机数而言,其算法显得尤为重要。
以园友:学院派的驴 的 C++随机数生成方法(转载,赶紧搜藏)为例,其所用的C++中的random函数基于的是伪随机数发生器,伪随机数发生器一般需要给出一个种子,(一旦种子和伪随机数算法一样,其产生的随机数序列将完全一样!)。该园友为了产生接近真随机的随机数序列,用系统时间作为伪随机发生器的种子srand(unsigned(time(0))); 这种做法在工程学上是简单且广泛的!
1 #include <iostream> 2 #include <ctime> 3 #include <cstdlib> 4 using namespace std; 5 6 int main() 7 { 8 double random(double,double); 9 srand(unsigned(time(0))); 10 for(int icnt = 0; icnt != 10; ++icnt) 11 cout << "No." << icnt+1 << ": " << int(random(0,10))<< endl; 12 return 0; 13 } 14 15 double random(double start, double end) 16 { 17 return start+(end-start)*rand()/(RAND_MAX + 1.0); 18 } 19 /* 运行结果 20 * No.1: 3 21 * No.2: 9 22 * No.3: 0 23 * No.4: 9 24 * No.5: 5 25 * No.6: 6 26 * No.7: 9 27 * No.8: 2 28 * No.9: 9 29 * No.10: 6 30 */