伪随机生成函数(寻求研究的朋友看过来,共同探讨)
上个星期有位朋友邀请我一起研究随机数生成函数,但是因为最近有期末考试所以谢绝了。今日在电脑上翻阅以前学习C语言的代码的时候翻出来了如下的头文件函数,就发上来,希望那位朋友见谅。也希望各位志同道合的朋友能一起探讨研究:程序代码:
/* A family of pseudo random number generators */ #define INITIAL_SEED 17 #define MULTIPLIER 25173 #define INCEREMENT 13849 #define MODULUS 65536 #define FLOATING_MODULUS 65536.0 static unsigned seed = INITIAL_SEED; /* external, but */ /* private to this file */ unsigned random(void) { seed = (MULTIPLIER * seed + INCEREMENT) % MODULUS; return seed; } double probability(void) { seed = (MULTIPLIER * seed + INCEREMENT) % MODULUS; return (seed / FLOATING_MODULUS); }大致原理是通过使用静态外部变量限制种子seed的作用域(它的作用域就是从它的声明位置开始,直到当前文件的结束位置。对于其它文件中所定义的函数,它是不可见的,即使这些函数使用了extern存储类型关键字),从而创建了一种“私有”机制(这对于模块化编程而言非常重要)。这两个伪随机生成函数使用了相同的种子(它们的算法基于线性同余方法)。random()函数产生了一组位于0和MODULUS之间的整型随机数。probability()函数产生一组位于0和1之间的浮点型随机数。