随机数生成解析
我们平时在做一些分析数据的时候经常会用到随机数,我们知道,随机数是一个设备,在利用这个设备生成随机数时,需要提供一个种子,如果我们不提供,那么默认会提供一个为1的种子,这时,随机数生成器生成的并不是真正意义上的随机数,因为每次那些随机数都是相同的,例如下面的这个例子:#include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } }
现在,我把程序改动如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; srand(time(NULL)); for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } } #include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; srand(time(NULL)); for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } }
从两次执行的程序可以看出,第一个程序得到的输出都是一样的,因为种子没有变,始终是1,第二个程序输出的每一次都不一样,因为,我用到了这个函数:
srand(time(NULL));
srand(time(NULL)); 这个函数是为 rand()提供种子的,为了使每次提供的种子都不一样,我把时间作为参数提供给函数,由于时间肯定是每次都不同的,所以,这样得到的才是真正意义上的随机数。
补充:软件开发 , C++ ,