comparison src/rand.cc @ 1249:86fc40576f22

[project @ 1995-04-11 01:03:08 by jwe]
author jwe
date Tue, 11 Apr 1995 01:03:57 +0000
parents b6360f2d4fa6
children 5cca5ae20299
comparison
equal deleted inserted replaced
1248:961d2acf5e86 1249:86fc40576f22
41 // Current distribution of random numbers. 41 // Current distribution of random numbers.
42 static rand_dist current_distribution = uniform; 42 static rand_dist current_distribution = uniform;
43 43
44 extern "C" 44 extern "C"
45 { 45 {
46 int *F77_FCN (dgennor) (double*, double*, double*); 46 int *F77_FCN (dgennor) (const double&, const double&, double&);
47 int *F77_FCN (dgenunf) (double*, double*, double*); 47 int *F77_FCN (dgenunf) (const double&, const double&, double&);
48 int *F77_FCN (setall) (int*, int*); 48 int *F77_FCN (setall) (const int&, const int&);
49 int *F77_FCN (getsd) (int*, int*); 49 int *F77_FCN (getsd) (int&, int&);
50 } 50 }
51 51
52 static double 52 static double
53 curr_rand_seed (void) 53 curr_rand_seed (void)
54 { 54 {
55 union d2i { double d; int i[2]; }; 55 union d2i { double d; int i[2]; };
56 union d2i u; 56 union d2i u;
57 F77_FCN (getsd) (&(u.i[0]), &(u.i[1])); 57 F77_FCN (getsd) (u.i[0]), u.i[1]);
58 return u.d; 58 return u.d;
59 } 59 }
60 60
61 static int 61 static int
62 force_to_fit_range (int i, int lo, int hi) 62 force_to_fit_range (int i, int lo, int hi)
79 union d2i { double d; int i[2]; }; 79 union d2i { double d; int i[2]; };
80 union d2i u; 80 union d2i u;
81 u.d = val; 81 u.d = val;
82 int i0 = force_to_fit_range (u.i[0], 1, 2147483563); 82 int i0 = force_to_fit_range (u.i[0], 1, 2147483563);
83 int i1 = force_to_fit_range (u.i[1], 1, 2147483399); 83 int i1 = force_to_fit_range (u.i[1], 1, 2147483399);
84 F77_FCN (setall) (&i0, &i1); 84 F77_FCN (setall) (i0, i1);
85 } 85 }
86 86
87 static char * 87 static char *
88 curr_rand_dist (void) 88 curr_rand_dist (void)
89 { 89 {
145 int s1 = hour * minute * second; 145 int s1 = hour * minute * second;
146 #endif 146 #endif
147 s0 = force_to_fit_range (s0, 1, 2147483563); 147 s0 = force_to_fit_range (s0, 1, 2147483563);
148 s1 = force_to_fit_range (s1, 1, 2147483399); 148 s1 = force_to_fit_range (s1, 1, 2147483399);
149 149
150 F77_FCN (setall) (&s0, &s1); 150 F77_FCN (setall) (s0, s1);
151 initialized = 1; 151 initialized = 1;
152 } 152 }
153 153
154 int n = 0; 154 int n = 0;
155 int m = 0; 155 int m = 0;
264 { 264 {
265 Matrix rand_mat (n, m); 265 Matrix rand_mat (n, m);
266 for (int j = 0; j < m; j++) 266 for (int j = 0; j < m; j++)
267 for (int i = 0; i < n; i++) 267 for (int i = 0; i < n; i++)
268 { 268 {
269 double d_zero = 0.0;
270 double d_one = 1.0;
271 double val; 269 double val;
272 switch (current_distribution) 270 switch (current_distribution)
273 { 271 {
274 case uniform: 272 case uniform:
275 F77_FCN (dgenunf) (&d_zero, &d_one, &val); 273 F77_FCN (dgenunf) (0.0, 1.0, val);
276 rand_mat.elem (i, j) = val; 274 rand_mat.elem (i, j) = val;
277 break; 275 break;
278 276
279 case normal: 277 case normal:
280 F77_FCN (dgennor) (&d_zero, &d_one, &val); 278 F77_FCN (dgennor) (0.0, 1.0, val);
281 rand_mat.elem (i, j) = val; 279 rand_mat.elem (i, j) = val;
282 break; 280 break;
283 281
284 default: 282 default:
285 panic_impossible (); 283 panic_impossible ();