📄 pmmlcg.c
字号:
/* name : pmmlcg.c by: Jonathan G. Fiscus For: 605.412 Fall 1990 This set of routines below implement a PMMLCG linear conguential random number generator given the following formula 5 31 Z = 7 * Z mod 2 -1 i (i-1)*/#include <util/utillib.h>static int random_seed = 1;static int a=16807;static int m=0x7fffffff;static int q=127773;static int r=2836;void init_seed(int new_seed, int verbose){ random_seed = new_seed; if (verbose){ printf("PMMLCG Initializing\n\n"); printf("PMMLCG Parameters:\n"); printf(" seed: %d\n",random_seed); printf(" a: %d\n",a); printf(" m: %d (%x)\n",m,m); printf(" q: %d\n",q); printf(" r: %d\n\n",r); }}float pmmlcg(void){ int lo, hi, test; hi = random_seed / q; lo = random_seed % q; test = (a*lo) - (r*hi); if (test > 0) random_seed = test; else random_seed = test + m; return((float)random_seed/(float)m);}int pmmlcg_newseed(void){ pmmlcg(); return(random_seed);}int pmmlcg_seed(void){ return(random_seed);}float exp_dist(float beta){ return(-(beta*log(pmmlcg())));}float M_erlang(float beta, int M){ float product=1.0; int i; for (i=0; i<M; i++) product *= pmmlcg(); return(-(beta/(float)M) * log(product));}int arbitrary_discrete_rv(float *prob_list, int num_prob){ float value; int i; value = pmmlcg(); for (i=0; i<num_prob; i++) if (value <= prob_list[i]) return(i); return(num_prob-1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -