伪随机生成函数(寻求研究的朋友看过来,共同探讨)
上个星期有位朋友邀请我一起研究随机数生成函数,但是因为最近有期末考试所以谢绝了。今日在电脑上翻阅以前学习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之间的浮点型随机数。






