计算机产生的随机数并不是真正随机的,所以叫 伪随机数。当“种子”固定时,它产生的随机数序列是不变的,例如产生10个数,这10个数大小是变化的,但只要用这个种子,每次产生的这10个数序列,是一模一样的。用 srand(time(0)); 设种子,就会因时间变化,得到不同的种子,那么随机数序列就会变化。time(0) 是当前时间,(精度可能是[毫秒]。只要两次跑程序启动时间差别 超过1[毫秒],两个序列就不同了(随机)。如果时间差别不到1[毫秒]两个序列就没变化.

作者:三四叶草
链接:http://www.jianshu.com/p/8d7617572252
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


drand48(), erand48(), jrand48(), lcong48(), lrand48(), mrand48(), nrand48(), seed48(), srand48()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef DRAND48_H  
#define DRAND48_H

#include <stdlib.h>

#define m 0x100000000LL
#define c 0xB16
#define a 0x5DEECE66DLL

static unsigned long long seed = 1;

double drand48(void)
{
seed = (a * seed + c) & 0xFFFFFFFFFFFFLL;
unsigned int x = seed >> 16;
return ((double)x / (double)m);

}

void srand48(unsigned int i)
{
seed = (((long long int)i) << 16) | rand();
}

#endif