Mercurial > octave
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 (); |