cpp 代码
- // file: sj03.h
- void rnd1(int *s1);
- void rnd2(int *s1, double *x);
- void swap_int(int *x, int *y);
- void irnd(int *s1, int i1, int i2, int *ii);
- void init_rnd(int *s1);
- // ----------------------------------------------
- void rnd1(int *s1)
- {
- // r(n)= (r(n-1)*a + b) MOD c
- // a= 7^5= 16807.0
- // b= 0.0
- // c= 2147483647.0
- // ----------------------------------------------
- // double r1, r2, r3;
- // r1= (double) (*s1);
- // r2= r1*16807.0;
- // r3= fmod(r2, 2147483647.0);
- (*s1)= (int) ((fmod((((double) (*s1))*16807.0), 2147483647.0)) + 0.5);
- }// end rnd1()
- // ----------------------------------------------
- void rnd2(int *s1, double *x)
- {
- rnd1(s1);
- *x= ((double) *s1)/2147483647.0;
- }// end rnd2()
- // ----------------------------------------------
- void swap_int(int *x, int *y)
- {
- int z;
- z= *x;
- *x= *y;
- *y= z;
- }// end swap_int()
- // ----------------------------------------------
- void irnd(int *s1, int i1, int i2, int *ii)
- {
- double x;
- rnd2(s1, &x);
- // I hope i1 <= i2
- if (i1 > i2) {
- swap_int(&i1, &i2);
- }
- *ii= ((int) (x*(i2 - i1 + 1))) + i1;
- }// end irnd()
- // ----------------------------------------------
- void init_rnd(int *s1)
- {
- int t1, t2;
- time1(&t1);
- // ----------------------------------------------
- t2= t1;
- do {
- time1(&t1);
- } while (t1 == t2);
- // t1 <> t2
- // ----------------------------------------------
- *s1= t1;
- for (int i=0;i<300;i++) {
- rnd1(s1);
- }
- }// end init_rnd()
自己寫的。