LibRan  0.1
Pseudo-random number distribution generator
turand.c
Go to the documentation of this file.
1 
11 #define PTEST(a,b) \
12  if ((a) == (b)) printf("OK "); \
13  else printf("FAIL"); \
14  printf(" : " #a "\n");
15 
16 #define NTEST(a,b) \
17  if ((a) != (b)) printf("OK "); \
18  else printf("FAIL"); \
19  printf(" : " #a "\n");
20 
21 #define ABS(a) ((a) < 0 ? -(a) : (a))
22 
23 #include <time.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include "libran.h"
27 #include "config.h"
28 
29 #ifndef MAXSMP
30 # define MAXSMP 1000000
31 #endif
32 
33 int main() {
34  int i, j;
35  int arrdim = 10;
36  int iarr1[10];
37  int uarr1[10];
38  int sample = 100000;
39  int imyseed = sizeof(int), imax = 0, itst;
40  long lmyseed = sizeof(long), lmax = 0, ltst;
41  double dten, dtst;
42  float ftst;
44 
45 /* lower precision int/float */
46 /* initialize arrays */
47  for (i=0; i<arrdim; ++i) {
48  iarr1[i] = 0;
49  uarr1[i] = 0;
50  }
51 /* initialize seed */
52  LR_isetseed(o, imyseed);
53  dten = 10./((double) LR_IRAND_IMAX);
54  ftst = LR_frand(o);
55  itst = LR_irand(o);
56  PTEST(LR_igetrand(o), itst );
57  NTEST(LR_fgetrand(o), ftst );
58  itst = LR_irand(o);
59  ftst = LR_frand(o);
60  PTEST(LR_fgetrand(o), ftst );
61  NTEST(LR_igetrand(o), itst );
62  PTEST(LR_igetseed(o), imyseed );
63 
64 /* sample from irand */
65  LR_isetseed(o, imyseed);
66  for (i = 0; i < sample; ++i) {
67  ++iarr1[(int) (((double) LR_irand(o)) * dten)];
68  imax = (imax > LR_igetrand(o) ? imax : LR_igetrand(o));
69  }
70 /* display results */
71  printf("seed = %ld %ld\n",
72  (long) imyseed,(long) LR_igetseed(o));
73  printf("IRAND MAX = %ld\n",(long) LR_IRAND_IMAX);
74  printf("LR_IRAND_IMAX = %ld\n",(long) LR_igetval("LR_IRAND_IMAX"));
75  printf("LR_IRAND_IMAX2= %ld\n",(long) LR_igetval("LR_IRAND_IMAX2"));
76  printf("LR_IRAND_INOT = %ld\n",(long) LR_igetval("LR_IRAND_INOT"));
77  printf("imax = %ld\n", (long) imax);
78  printf("sampling from LR_irand()\n");
79  for (i=0; i<arrdim; ++i) {
80  printf(" %5d",iarr1[i]);
81  }
82  printf("\n");
83 /* sample from LR_frand */
84  printf("sampling from LR_frand()\n");
85  LR_isetseed(o,imyseed);
86  for (i = 0; i < sample; ++i) {
87  ++uarr1[((int) (10.*LR_frand(o)))];
88  }
89  for (i=0; i<arrdim; ++i) {
90  printf(" %5d",uarr1[i]);
91  }
92  printf("\n");
93 /* the two arrays should be roughly equivalent */
94  dten = sample/1000;
95  itst = 0;
96  for (i=0; i<arrdim; ++i) {
97  if (ABS(iarr1[i] - uarr1[i]) > dten) itst++;
98  }
99  if (itst) printf("FAIL");
100  else printf("OK ");
101  printf(" : compare LR_irand() and LR_frand() distributions\n");
102 
103 /* higher precision long/double */
104 /* initialize arrays */
105  for (i=0; i<arrdim; ++i) {
106  iarr1[i] = 0;
107  uarr1[i] = 0;
108  }
109 /* initialize seed */
110  LR_lsetseed(o,lmyseed);
111  dten = 10./((double) LR_IRAND_LMAX);
112  dtst = LR_drand(o);
113  ltst = LR_lrand(o);
114  PTEST(LR_lgetrand(o), ltst );
115  NTEST(LR_dgetrand(o), dtst );
116  ltst = LR_lrand(o);
117  dtst = LR_drand(o);
118  PTEST(LR_dgetrand(o), dtst );
119  NTEST(LR_lgetrand(o), ltst );
120  PTEST(LR_lgetseed(o), lmyseed );
121 
122 /* sample from irand */
123  LR_lsetseed(o,lmyseed);
124  for (i = 0; i < sample; ++i) {
125  ++iarr1[(int) (((double) LR_lrand(o)) * dten)];
126  lmax = (lmax > LR_lgetrand(o) ? lmax : LR_lgetrand(o));
127  }
128 /* display results */
129  printf("seed = %ld %ld\n",(long) lmyseed, (long) LR_lgetseed(o));
130  printf("IRAND MAX = %ld\n",(long) LR_IRAND_LMAX);
131  printf("LR_IRAND_LMAX = %ld\n",(long) LR_lgetval("LR_IRAND_LMAX"));
132  printf("LR_IRAND_LMAX2= %ld\n",(long) LR_lgetval("LR_IRAND_LMAX2"));
133  printf("LR_IRAND_LNOT = %ld\n",(long) LR_lgetval("LR_IRAND_LNOT"));
134  printf("lmax = %ld\n", (long) lmax);
135  printf("sampling from LR_lrand()\n");
136  for (i=0; i<arrdim; ++i) {
137  printf(" %5d",iarr1[i]);
138  }
139  printf("\n");
140 /* sample from LR_drand */
141  printf("sampling from LR_drand()\n");
142  LR_lsetseed(o,lmyseed);
143  for (i = 0; i < sample; ++i) {
144  ++uarr1[((int) (10.*LR_drand(o)))];
145  }
146  for (i=0; i<arrdim; ++i) {
147  printf(" %5d",uarr1[i]);
148  }
149  printf("\n");
150 /* the two arrays should be roughly equivalent */
151  dten = sample/1000;
152  ltst = 0;
153  for (i=0; i<arrdim; ++i) {
154  if (ABS(iarr1[i] - uarr1[i]) > dten) ltst++;
155  }
156  if (ltst) printf("FAIL");
157  else printf("OK ");
158  printf(" : compare LR_lrand() and LR_drand() distributions\n");
159 
160  return 0;
161 }
int LR_igetrand(LR_obj *)
LR_igetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:243
long LR_lgetval(char *str)
LR_lgetval(char *val) - return the configure value.
Definition: urand.c:443
double LR_drand(LR_obj *)
LR_drand(LR_obj *) - returns double in range [0.0,1.0)
Definition: urand.c:342
#define LR_IRAND_LMAX
LibRan IRAND max long value.
Definition: config.h:137
int LR_irand(LR_obj *)
LR_irand(LR_obj *) - returns int in range [0,LR_IRAND_IMAX].
Definition: urand.c:121
float LR_fgetrand(LR_obj *)
LR_fgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:256
int LR_igetval(char *str)
LR_igetval(char *val) - return the configure value.
Definition: urand.c:422
long LR_lrand(LR_obj *)
LR_lrand(LR_obj *) - returns long in range [0,LR_IRAND_LMAX].
Definition: urand.c:270
Definition: libran.h:58
LR_obj * LR_new(LR_type t, LR_data_type d)
LR_new(LR_type t, LR_data_type d) - create the LR object and preset some default parameter values...
Definition: LRnew.c:60
long LR_lgetrand(LR_obj *)
LR_lgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:392
int LR_igetseed(LR_obj *)
LR_igetseed(LR_obj *) - get the current seed.
Definition: urand.c:230
double LR_dgetrand(LR_obj *)
LR_dgetrand(LR_obj *) - get the current pseudo-random number.
Definition: urand.c:405
#define LR_IRAND_IMAX
LibRan IRAND max int value.
Definition: config.h:155
float LR_frand(LR_obj *)
LR_frand(LR_obj *) - returns float in range [0.0,1.0)
Definition: urand.c:193
long LR_lgetseed(LR_obj *)
LR_lgetseed(LR_obj *) - get the current seed.
Definition: urand.c:379
Generated by the configuration step.
void LR_isetseed(LR_obj *, int ity)
LR_isetseed(LR_obj *, int X) - set the seed to X.
Definition: urand.c:212
The LibRan common header file.
the fundamental LibRan random variate distribution object
Definition: libran.h:134
void LR_lsetseed(LR_obj *, long lty)
LR_lsetseed(LR_obj *, long X) - set the seed to X.
Definition: urand.c:361