14 #define GLOBAL_RAND_SEED_KEY "$mrb_g_rand_seed"
15 #define GLOBAL_RAND_SEED_KEY_CSTR_LEN 16
17 #define INSTANCE_RAND_SEED_KEY "$mrb_i_rand_seed"
18 #define INSTANCE_RAND_SEED_KEY_CSTR_LEN 16
20 #define MT_STATE_KEY "$mrb_i_mt_state"
21 #define MT_STATE_KEY_CSTR_LEN 15
38 static void mt_g_srand(
unsigned long seed)
43 static unsigned long mt_g_rand()
48 static double mt_g_rand_real()
56 seed = mrb_fixnum_value(time(NULL) + mt_g_rand());
58 seed = mrb_fixnum_value( 0 -
mrb_fixnum(seed));
72 value = mrb_float_value(mrb, mt_g_rand_real());
74 value = mrb_fixnum_value(mt_g_rand() %
mrb_fixnum(max));
80 static void mt_srand(
mt_state *t,
unsigned long seed)
85 static unsigned long mt_rand(
mt_state *t)
90 static double mt_rand_real(
mt_state *t)
98 seed = mrb_fixnum_value(time(NULL) + mt_rand(t));
100 seed = mrb_fixnum_value( 0 -
mrb_fixnum(seed));
114 value = mrb_float_value(mrb, mt_rand_real(t));
116 value = mrb_fixnum_value(mt_rand(t) %
mrb_fixnum(max));
126 arg = mrb_fixnum_value(0);
149 mrb_random_mt_g_srand(mrb, mrb_nil_value());
151 return mrb_random_mt_g_rand(mrb, max);
160 seed = mrb_random_mt_g_srand(mrb, seed);
175 seed = mrb_random_mt_srand(mrb, t, seed);
186 mt_state *t = mrb_mt_get_context(mrb,
self);
191 mrb_random_mt_srand(mrb, t, mrb_nil_value());
193 return mrb_random_mt_rand(mrb, t, max);
200 mt_state *t = mrb_mt_get_context(mrb,
self);
203 seed = mrb_random_mt_srand(mrb, t, seed);