From d188e1a8529927749c378f7c5f9e27464a686749 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 15 Mar 2010 05:06:11 +0000 Subject: * random.c (next_state): no initialization here. * random.c (default_mt): always return initialized MT. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ random.c | 40 +++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index f2b4e1c629..23712b0900 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Mar 15 14:06:07 2010 Nobuyoshi Nakada + + * random.c (next_state): no initialization here. + + * random.c (default_mt): always return initialized MT. + Mon Mar 15 11:49:48 2010 NARUSE, Yui * random.c (rb_reset_random_seed): set seed in this. diff --git a/random.c b/random.c index d36853f6b3..cdc1c65d4e 100644 --- a/random.c +++ b/random.c @@ -137,10 +137,6 @@ next_state(struct MT *mt) unsigned int *p = mt->state; int j; - /* if init_genrand() has not been called, */ - /* a default initial seed is used */ - if (!genrand_initialized(mt)) init_genrand(mt, 5489U); - mt->left = N; mt->next = mt->state; @@ -157,6 +153,7 @@ next_state(struct MT *mt) static unsigned int genrand_int32(struct MT *mt) { + /* mt must be initialized */ unsigned int y; if (--mt->left <= 0) next_state(mt); @@ -175,6 +172,7 @@ genrand_int32(struct MT *mt) static double genrand_real(struct MT *mt) { + /* mt must be initialized */ unsigned int a = genrand_int32(mt)>>5, b = genrand_int32(mt)>>6; return(a*67108864.0+b)*(1.0/9007199254740992.0); } @@ -184,6 +182,7 @@ static double int_pair_to_real_inclusive(unsigned int a, unsigned int b); static double genrand_real2(struct MT *mt) { + /* mt must be initialized */ unsigned int a = genrand_int32(mt), b = genrand_int32(mt); return int_pair_to_real_inclusive(a, b); } @@ -226,30 +225,28 @@ static struct Random default_rand; static VALUE rand_init(struct MT *mt, VALUE vseed); static VALUE random_seed(void); -static void -default_rand_init(void) +static struct MT * +default_mt(void) { rb_random_t *r = &default_rand.rnd; - r->seed = rand_init(&r->mt, random_seed()); + struct MT *mt = &r->mt; + if (!genrand_initialized(mt)) { + r->seed = rand_init(mt, random_seed()); + } + return mt; } unsigned int rb_genrand_int32(void) { - struct MT *mt = &default_rand.rnd.mt; - if (!genrand_initialized(mt)) { - default_rand_init(); - } + struct MT *mt = default_mt(); return genrand_int32(mt); } double rb_genrand_real(void) { - struct MT *mt = &default_rand.rnd.mt; - if (!genrand_initialized(mt)) { - default_rand_init(); - } + struct MT *mt = default_mt(); return genrand_real(mt); } @@ -774,6 +771,7 @@ make_mask(unsigned long x) static unsigned long limited_rand(struct MT *mt, unsigned long limit) { + /* mt must be initialized */ int i; unsigned long val, mask; @@ -795,6 +793,7 @@ limited_rand(struct MT *mt, unsigned long limit) static VALUE limited_big_rand(struct MT *mt, struct RBignum *limit) { + /* mt must be initialized */ unsigned long mask, lim, rnd; struct RBignum *val; long i, len; @@ -845,10 +844,7 @@ limited_big_rand(struct MT *mt, struct RBignum *limit) unsigned long rb_rand_internal(unsigned long i) { - struct MT *mt = &default_rand.rnd.mt; - if (!genrand_initialized(mt)) { - default_rand_init(); - } + struct MT *mt = default_mt(); return limited_rand(mt, i); } @@ -919,6 +915,7 @@ range_values(VALUE vmax, VALUE *begp, int *exclp) static VALUE rand_int(struct MT *mt, VALUE vmax, int restrictive) { + /* mt must be initialized */ long max; unsigned long r; @@ -1124,11 +1121,8 @@ static VALUE rb_f_rand(int argc, VALUE *argv, VALUE obj) { VALUE vmax, r; - struct MT *mt = &default_rand.rnd.mt; + struct MT *mt = default_mt(); - if (!genrand_initialized(mt)) { - default_rand_init(); - } if (argc == 0) goto zero_arg; rb_scan_args(argc, argv, "01", &vmax); if (NIL_P(vmax)) goto zero_arg; -- cgit v1.2.3