今天学习了一下随机函数rand的算法。
这个算法叫做线性同余算法(linear congruential generator (LCG))。
不同的编译器取的常数不同,可以参考wiki:
以下程序可以输出和系统一样的随机数。
1 #include2 #include 3 4 5 #define _A 214013LL 6 #define _B 2531011LL 7 8 9 int a;10 11 12 void mysrand(int x)13 {14 a = x;15 }16 17 18 int myrand()19 {20 return ((a = a * _A + _B)>>16) & 0x7fff;21 }22 23 24 int main()25 {26 mysrand(0);27 srand(0);28 while (1)29 {30 printf ("%d, %d\n", rand(), myrand());31 getchar();32 }33 return 0;34 }