random.c File Reference
`#include "ruby/ruby.h"`
`#include <limits.h>`
`#include <time.h>`
`#include <sys/types.h>`
`#include <sys/stat.h>`
`#include <math.h>`
`#include <errno.h>`

Go to the source code of this file.

## Data Structures

struct | MT
struct | rb_random_t

## Macros

#define | N 624
#define | M 397
#define | MATRIX_A 0x9908b0dfU /* constant vector a */
#define | UMASK 0x80000000U /* most significant w-r bits */
#define | LMASK 0x7fffffffU /* least significant r bits */
#define | MIXBITS(u, v) ( ((u) & UMASK) | ((v) & LMASK) )
#define | TWIST(u, v) ((MIXBITS((u),(v)) >> 1) ^ ((v)&1U ? MATRIX_A : 0U))
#define | genrand_initialized(mt) ((mt)->next != 0)
#define | uninit_genrand(mt) ((mt)->next = 0)
#define | DEFAULT_SEED_CNT 4
#define | BDIGITS(x) (RBIGNUM_DIGITS(x))
#define | BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)
#define | BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)
#define | DIGSPERINT (SIZEOF_INT/SIZEOF_BDIGITS)
#define | BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG)
#define | BIGDN(x) RSHIFT((x),BITSPERDIG)
#define | BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1)))
#define | BDIGMAX ((BDIGIT)-1)
#define | roomof(n, m) (int)(((n)+(m)-1) / (m))
#define | numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
#define | SIZEOF_INT32 (31/CHAR_BIT + 1)
#define | id_minus '-'
#define | id_plus '+'
#define | DEFAULT_SEED_LEN (DEFAULT_SEED_CNT * (int)sizeof(int))
#define | USE_DEV_URANDOM 0
#define | BIG_GET32(big, i) (RBIGNUM_DIGITS(big)[(i)])
#define | BIG_SET32(big, i, d) (RBIGNUM_DIGITS(big)[(i)] = (d))

## Typedefs

typedef int | int_must_be_32bit_at_least [sizeof(int)*CHAR_BIT< 32?-1:1]

## Enumerations

enum | { MT_MAX_STATE = N }

## Functions

static void | init_genrand (struct MT *mt, unsigned int s)
static void | init_by_array (struct MT *mt, unsigned int init_key[], int key_length)
static void | next_state (struct MT *mt)
static unsigned int | genrand_int32 (struct MT *mt)
static double | genrand_real (struct MT *mt)
static double | int_pair_to_real_inclusive (unsigned int a, unsigned int b)
static double | genrand_real2 (struct MT *mt)
static VALUE | rand_init (struct MT *mt, VALUE vseed)
static VALUE | random_seed (void)
static rb_random_t * | rand_start (rb_random_t *r)
static struct MT * | default_mt (void)
unsigned int | rb_genrand_int32 (void)
double | rb_genrand_real (void)
static void | random_mark (void *ptr)
static void | random_free (void *ptr)
static size_t | random_memsize (const void *ptr)
static rb_random_t * | get_rnd (VALUE obj)
static rb_random_t * | try_get_rnd (VALUE obj)
static VALUE | random_alloc (VALUE klass)
static VALUE | random_init (int argc, VALUE *argv, VALUE obj)
static void | fill_random_seed (unsigned int seed[DEFAULT_SEED_CNT])
static VALUE | make_seed_value (const void *ptr)
static VALUE | random_get_seed (VALUE obj)
static VALUE | random_copy (VALUE obj, VALUE orig)
static VALUE | mt_state (const struct MT *mt)
static VALUE | random_state (VALUE obj)
static VALUE | random_s_state (VALUE klass)
static VALUE | random_left (VALUE obj)
static VALUE | random_s_left (VALUE klass)
static VALUE | random_dump (VALUE obj)
static VALUE | random_load (VALUE obj, VALUE dump)
static VALUE | rb_f_srand (int argc, VALUE *argv, VALUE obj)
static unsigned long | make_mask (unsigned long x)
static unsigned long | limited_rand (struct MT *mt, unsigned long limit)
static VALUE | limited_big_rand (struct MT *mt, struct RBignum *limit)
unsigned long | rb_genrand_ulong_limited (unsigned long limit)
unsigned int | rb_random_int32 (VALUE obj)
double | rb_random_real (VALUE obj)
static VALUE | random_bytes (VALUE obj, VALUE len)
VALUE | rb_random_bytes (VALUE obj, long n)
static VALUE | range_values (VALUE vmax, VALUE *begp, VALUE *endp, int *exclp)
static VALUE | rand_int (struct MT *mt, VALUE vmax, int restrictive)
static double | float_value (VALUE v)
static VALUE | rand_range (struct MT *mt, VALUE range)
static VALUE | random_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | random_equal (VALUE self, VALUE other)
static VALUE | rb_f_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | random_s_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | init_randomseed (struct MT *mt, unsigned int initial[DEFAULT_SEED_CNT])
void | Init_RandomSeed (void)
st_index_t | rb_hash_start (st_index_t h)
static void | Init_RandomSeed2 (void)
void | rb_reset_random_seed (void)
void | Init_Random (void)

## Variables

static rb_random_t | default_rand
VALUE | rb_cRandom
static VALUE | rb_Random_DEFAULT
static ID | id_rand
static ID | id_bytes
static const rb_data_type_t | random_data_type
static st_index_t | hashseed

## Macro Definition Documentation

#define BDIGITS | ( |  | x | ) | (RBIGNUM_DIGITS(x))

Definition at line 262 of file random.c.

Referenced by int_pair_to_real_inclusive(), and random_load().

#define BDIGMAX ((BDIGIT)-1)

Definition at line 269 of file random.c.

#define BIG_GET32 | ( |  | big,
|  |  | i
| ) |  | (RBIGNUM_DIGITS(big)[(i)])

Referenced by limited_big_rand().

#define BIG_SET32 | ( |  | big,
|  |  | i,
|  |  | d
| ) |  | (RBIGNUM_DIGITS(big)[(i)] = (d))

Referenced by limited_big_rand().

#define BIGDN | ( |  | x | ) | RSHIFT((x),BITSPERDIG)

Definition at line 267 of file random.c.

Referenced by mt_state().

#define BIGLO | ( |  | x | ) | ((BDIGIT)((x) & (BIGRAD-1)))

Definition at line 268 of file random.c.

Referenced by mt_state().

#define BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)

Definition at line 264 of file random.c.

#define BIGUP | ( |  | x | ) | ((BDIGIT_DBL)(x) << BITSPERDIG)

Definition at line 266 of file random.c.

#define BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)

Definition at line 263 of file random.c.

Referenced by int_pair_to_real_inclusive(), rand_init(), and random_load().

#define DEFAULT_SEED_CNT 4

Definition at line 225 of file random.c.

Referenced by Init_RandomSeed(), and random_seed().

#define DEFAULT_SEED_LEN (DEFAULT_SEED_CNT * (int)sizeof(int))

Definition at line 484 of file random.c.

Referenced by fill_random_seed(), init_randomseed(), and make_seed_value().

#define DIGSPERINT (SIZEOF_INT/SIZEOF_BDIGITS)

Definition at line 265 of file random.c.

Referenced by random_load().

#define genrand_initialized | ( |  | mt | ) | ((mt)->next != 0)

Definition at line 106 of file random.c.

Referenced by rand_start().

#define id_minus '-'

Definition at line 328 of file random.c.

Referenced by range_values().

#define id_plus '+'

Definition at line 329 of file random.c.

Referenced by rand_range().

#define LMASK 0x7fffffffU /* least significant r bits */

Definition at line 93 of file random.c.

#define M 397

Definition at line 90 of file random.c.

Referenced by next_state().

#define MATRIX_A 0x9908b0dfU /* constant vector a */

Definition at line 91 of file random.c.

#define MIXBITS | ( |  | u,
|  |  | v
| ) |  | ( ((u) & UMASK) | ((v) & LMASK) )

Definition at line 94 of file random.c.

#define N 624

Definition at line 89 of file random.c.

Referenced by init_by_array(), init_genrand(), and next_state().

#define numberof | ( |  | array | ) | (int)(sizeof(array) / sizeof((array)[0]))

Definition at line 272 of file random.c.

Referenced by mt_state(), rand_init(), random_copy(), and random_load().

#define roomof | ( |  | n,
|  |  | m
| ) |  | (int)(((n)+(m)-1) / (m))

Definition at line 271 of file random.c.

Referenced by int_pair_to_real_inclusive(), rand_init(), and random_load().

#define SIZEOF_INT32 (31/CHAR_BIT + 1)

Definition at line 273 of file random.c.

Referenced by limited_rand(), mt_state(), rand_init(), and rb_random_bytes().

#define TWIST | ( |  | u,
|  |  | v
| ) |  | ((MIXBITS((u),(v)) >> 1) ^ ((v)&1U ? MATRIX_A : 0U))

Definition at line 95 of file random.c.

Referenced by next_state().

#define UMASK 0x80000000U /* most significant w-r bits */

Definition at line 92 of file random.c.

#define uninit_genrand | ( |  | mt | ) | ((mt)->next = 0)

Definition at line 107 of file random.c.

Referenced by rb_reset_random_seed().

#define USE_DEV_URANDOM 0

Definition at line 489 of file random.c.

## Typedef Documentation

typedef int int_must_be_32bit_at_least[sizeof(int)*CHAR_BIT< 32?-1:1]

Definition at line 86 of file random.c.

## Enumeration Type Documentation

anonymous enum

Enumerator
MT_MAX_STATE |

Definition at line 97 of file random.c.

## Function Documentation

static struct MT* default_mt | ( | void |  | ) |

static read

Definition at line 243 of file random.c.

References rb_random_t::mt, and rand_start().

Referenced by rb_f_rand(), rb_genrand_int32(), rb_genrand_real(), and rb_genrand_ulong_limited().

static void fill_random_seed | ( | unsigned int | seed[DEFAULT_SEED_CNT] | ) |

static

Definition at line 493 of file random.c.

References CHAR_BIT, DEFAULT_SEED_LEN, fstat, gettimeofday(), NULL, O_NONBLOCK, rb_update_max_fd(), S_ISCHR, stat, time_t, timeval::tv_sec, and timeval::tv_usec.

Referenced by init_randomseed(), and random_seed().

static double float_value | ( | VALUE | v | ) |

inline static

Definition at line 1020 of file random.c.

References INT2FIX, isinf(), isnan, rb_class_new_instance(), rb_eSystemCallError, rb_exc_raise(), and RFLOAT_VALUE.

Referenced by rand_range(), and random_rand().

static unsigned int genrand_int32 | ( | struct MT * | mt | ) |

static

Definition at line 177 of file random.c.

References MT::left, MT::next, and next_state().

Referenced by genrand_real(), genrand_real2(), Init_RandomSeed(), limited_big_rand(), limited_rand(), rb_genrand_int32(), rb_random_bytes(), and rb_random_int32().

static double genrand_real | ( | struct MT * | mt | ) |

static

Definition at line 196 of file random.c.

References genrand_int32().

Referenced by rand_range(), random_rand(), rb_f_rand(), rb_genrand_real(), and rb_random_real().

static double genrand_real2 | ( | struct MT * | mt | ) |

static

Definition at line 206 of file random.c.

References genrand_int32(), and int_pair_to_real_inclusive().

Referenced by rand_range().

static rb_random_t* get_rnd | ( | VALUE | obj | ) |

static

Definition at line 362 of file random.c.

References TypedData_Get_Struct.

Referenced by random_copy(), random_dump(), random_equal(), random_get_seed(), random_init(), random_left(), random_load(), random_rand(), and random_state().

static void init_by_array | ( | struct MT * | mt,
|  | unsigned int | init_key[],
|  | int | key_length
| ) |  |

static

Definition at line 132 of file random.c.

References i, init_genrand(), N, and MT::state.

Referenced by init_randomseed(), and rand_init().

static void init_genrand | ( | struct MT * | mt,
|  | unsigned int | s
| ) |  |

static

Definition at line 111 of file random.c.

References MT::left, N, MT::next, and MT::state.

Referenced by init_by_array(), and rand_init().

void Init_Random | ( | void |  | ) |

Definition at line 1325 of file random.c.

References CLASS_OF, id_bytes, id_rand, Init_RandomSeed2(), random_alloc(), random_bytes(), random_copy(), random_dump(), random_equal(), random_get_seed(), random_init(), random_left(), random_load(), random_rand(), random_s_left(), random_s_rand(), random_s_state(), random_seed(), random_state(), rb_cObject, rb_cRandom, rb_define_alloc_func(), rb_define_class(), rb_define_const(), rb_define_global_function(), rb_define_method(), rb_define_private_method(), rb_define_singleton_method(), rb_f_rand(), rb_f_srand(), rb_global_variable(), rb_intern, rb_Random_DEFAULT, and TypedData_Wrap_Struct.

static VALUE init_randomseed | ( | struct MT * | mt,
|  | unsigned int | initial[DEFAULT_SEED_CNT]
| ) |  |

static

Definition at line 1264 of file random.c.

References DEFAULT_SEED_LEN, fill_random_seed(), init_by_array(), and make_seed_value().

Referenced by Init_RandomSeed().

void Init_RandomSeed | ( | void |  | ) |

Definition at line 1275 of file random.c.

References default_rand, DEFAULT_SEED_CNT, genrand_int32(), hashseed, init_randomseed(), rb_random_t::mt, rb_global_variable(), and rb_random_t::seed.

static void Init_RandomSeed2 | ( | void |  | ) |

static

Definition at line 1307 of file random.c.

References rb_cBignum, RB_TYPE_P, RBASIC, rb_random_t::seed, and T_BIGNUM.

Referenced by Init_Random().

static double int_pair_to_real_inclusive | ( | unsigned int | a,
|  | unsigned int | b
| ) |  |

static

Definition at line 276 of file random.c.

References BDIGIT, BDIGITS, BITSPERDIG, FIX2ULONG, FIXNUM_P, i, INT2FIX, len, MEMMOVE, MEMZERO, rb_big2dbl(), rb_big_mul(), rb_big_new(), rb_big_rshift(), RBIGNUM_LEN, and roomof.

Referenced by genrand_real2().

static VALUE limited_big_rand | ( | struct MT * | mt,
|  | struct RBignum * | limit
| ) |  |

static

Definition at line 830 of file random.c.

References BDIGIT, BIG_GET32, BIG_SET32, genrand_int32(), i, len, make_mask(), rb_big_clone(), rb_big_norm(), RBIGNUM_LEN, RBIGNUM_SET_SIGN, and SIZEOF_BDIGITS.

Referenced by rand_int(), and rand_range().

static unsigned long limited_rand | ( | struct MT * | mt,
|  | unsigned long | limit
| ) |  |

static

Definition at line 808 of file random.c.

References genrand_int32(), i, long, make_mask(), and SIZEOF_INT32.

Referenced by rand_int(), rand_range(), and rb_genrand_ulong_limited().

static unsigned long make_mask | ( | unsigned long | x | ) |

static

Definition at line 794 of file random.c.

Referenced by limited_big_rand(), and limited_rand().

static VALUE make_seed_value | ( | const void * | ptr | ) |

static

Definition at line 544 of file random.c.

References BDIGIT, DEFAULT_SEED_LEN, len, MEMCPY, NEWOBJ, OBJSETUP, rb_big_norm(), rb_big_resize(), rb_cBignum, RBIGNUM_DIGITS, RBIGNUM_SET_SIGN, SIZEOF_BDIGITS, and T_BIGNUM.

Referenced by init_randomseed(), and random_seed().

static VALUE mt_state | ( | const struct MT * | mt | ) |

static

Definition at line 607 of file random.c.

References BDIGIT, BIGDN, BIGLO, i, numberof, rb_big_new(), rb_big_norm(), RBIGNUM_DIGITS, SIZEOF_BDIGITS, SIZEOF_INT32, and MT::state.

Referenced by random_dump(), random_s_state(), and random_state().

static void next_state | ( | struct MT * | mt | ) |

static

Definition at line 158 of file random.c.

References MT::left, M, N, MT::next, p, MT::state, and TWIST.

Referenced by genrand_int32().

static VALUE rand_init | ( | struct MT * | mt,
|  | VALUE | vseed
| ) |  |

static

Definition at line 390 of file random.c.

References ALLOC_N, BITSPERDIG, buf, FIX2LONG, i, init_by_array(), init_genrand(), len, MT_MAX_STATE, numberof, rb_eTypeError, rb_obj_classname(), rb_raise(), rb_to_int(), RBIGNUM_DIGITS, RBIGNUM_LEN, roomof, SIZEOF_BDIGITS, SIZEOF_INT32, T_BIGNUM, T_FIXNUM, TYPE, and xfree().

Referenced by rand_start(), random_init(), and rb_f_srand().

static VALUE rand_int | ( | struct MT * | mt,
|  | VALUE | vmax,
|  | int | restrictive
| ) |  |

static

Definition at line 982 of file random.c.

References FIX2LONG, FIXNUM_P, INT2FIX, limited_big_rand(), limited_rand(), LONG2NUM, max(), Qnil, rb_big_clone(), rb_big_minus(), rb_bigzero_p(), RB_GC_GUARD, RBIGNUM, RBIGNUM_SET_SIGN, RBIGNUM_SIGN, and ULONG2NUM().

Referenced by random_rand(), and rb_f_rand().

static VALUE rand_range | ( | struct MT * | mt,
|  | VALUE | range
| ) |  |

inline static

Definition at line 1031 of file random.c.

References BUILTIN_TYPE, FIX2LONG, FIXNUM_P, float_value(), genrand_real(), genrand_real2(), id_plus, INT2FIX, isinf(), limited_big_rand(), limited_rand(), LONG2NUM, max(), min(), NIL_P, Qfalse, Qnil, Qundef, range_values(), rb_big_minus(), rb_big_norm(), rb_big_plus(), rb_bigzero_p(), rb_check_to_float(), rb_check_to_integer(), rb_float_new(), rb_funcall2(), rb_to_float(), RBIGNUM, RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FLOAT, T_NIL, TYPE, ULONG2NUM(), and v.

Referenced by random_rand(), and rb_f_rand().

static rb_random_t* rand_start | ( | rb_random_t * | r | ) |

static

Definition at line 233 of file random.c.

References genrand_initialized, rb_random_t::mt, rand_init(), random_seed(), and rb_random_t::seed.

Referenced by default_mt(), and try_get_rnd().

static VALUE random_alloc | ( | VALUE | klass | ) |

static

Definition at line 381 of file random.c.

References INT2FIX, rb_random_t::seed, and TypedData_Make_Struct.

Referenced by Init_Random().

static VALUE random_bytes | ( | VALUE | obj,
|  | VALUE | len
| ) |  |

static

Definition at line 931 of file random.c.

References NUM2LONG(), rb_random_bytes(), and rb_to_int().

Referenced by Init_Random().

static VALUE random_copy | ( | VALUE | obj,
|  | VALUE | orig
| ) |  |

static

Definition at line 595 of file random.c.

References get_rnd(), MT::left, rb_random_t::mt, MT::next, numberof, and MT::state.

Referenced by Init_Random().

static VALUE random_dump | ( | VALUE | obj | ) |

static

Definition at line 660 of file random.c.

References get_rnd(), INT2FIX, MT::left, rb_random_t::mt, mt_state(), rb_ary_new2(), rb_ary_push(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_equal | ( | VALUE | self,
|  | VALUE | other
| ) |  |

static

Definition at line 1185 of file random.c.

References get_rnd(), MT::left, memcmp(), rb_random_t::mt, MT::next, Qfalse, Qtrue, rb_funcall2(), rb_intern, rb_obj_class(), RTEST, rb_random_t::seed, and MT::state.

Referenced by Init_Random().

static void random_free | ( | void * | ptr | ) |

static

Definition at line 340 of file random.c.

References xfree().

static VALUE random_get_seed | ( | VALUE | obj | ) |

static

Definition at line 588 of file random.c.

References get_rnd(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_init | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |

static

Definition at line 469 of file random.c.

References get_rnd(), rb_random_t::mt, rand_init(), random_seed(), rb_scan_args(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_left | ( | VALUE | obj | ) |

static

Definition at line 645 of file random.c.

References get_rnd(), INT2FIX, MT::left, and rb_random_t::mt.

Referenced by Init_Random().

static VALUE random_load | ( | VALUE | obj,
|  | VALUE | dump
| ) |  |

static

Definition at line 674 of file random.c.

References BDIGIT, BDIGITS, BITSPERDIG, Check_Type, DIGSPERINT, FIX2ULONG, FIXNUM_P, get_rnd(), INT2FIX, MT::left, len, rb_random_t::mt, MT::next, NUM2ULONG, numberof, RARRAY_LEN, RARRAY_PTR, rb_eArgError, rb_raise(), rb_to_int(), RBIGNUM_DIGITS, RBIGNUM_LEN, roomof, rb_random_t::seed, SIZEOF_BDIGITS, MT::state, T_ARRAY, and T_BIGNUM.

Referenced by Init_Random().

static void random_mark | ( | void * | ptr | ) |

static

Definition at line 334 of file random.c.

References rb_gc_mark().

static size_t random_memsize | ( | const void * | ptr | ) |

static

Definition at line 347 of file random.c.

static VALUE random_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |

static

Definition at line 1137 of file random.c.

References float_value(), genrand_real(), get_rnd(), max(), rb_random_t::mt, NIL_P, NUM2LONG(), Qfalse, Qnil, rand_int(), rand_range(), rb_check_to_float(), rb_check_to_integer(), rb_eArgError, rb_exc_new3(), rb_exc_raise(), rb_float_new(), rb_obj_as_string(), rb_raise(), rb_str_append(), rb_str_new_cstr(), T_FLOAT, TYPE, and v.

Referenced by Init_Random(), and random_s_rand().

static VALUE random_s_left | ( | VALUE | klass | ) |

static

Definition at line 653 of file random.c.

References INT2FIX, MT::left, and rb_random_t::mt.

Referenced by Init_Random().

static VALUE random_s_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |

static

Definition at line 1256 of file random.c.

References random_rand(), and rb_Random_DEFAULT.

Referenced by Init_Random().

static VALUE random_s_state | ( | VALUE | klass | ) |

static

Definition at line 638 of file random.c.

References rb_random_t::mt, and mt_state().

Referenced by Init_Random().

static VALUE random_seed | ( | void |  | ) |

static

Definition at line 575 of file random.c.

References buf, DEFAULT_SEED_CNT, fill_random_seed(), and make_seed_value().

Referenced by Init_Random(), rand_start(), random_init(), and rb_f_srand().

static VALUE random_state | ( | VALUE | obj | ) |

static

Definition at line 630 of file random.c.

References get_rnd(), rb_random_t::mt, and mt_state().

Referenced by Init_Random().

static VALUE range_values | ( | VALUE | vmax,
|  | VALUE * | begp,
|  | VALUE * | endp,
|  | int * | exclp
| ) |  |

static

Definition at line 969 of file random.c.

References id_minus, NIL_P, Qfalse, rb_funcall2(), rb_range_values(), and rb_respond_to().

Referenced by rand_range().

static VALUE rb_f_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |

static

Definition at line 1227 of file random.c.

References DBL2NUM, default_mt(), genrand_real(), INT2FIX, NIL_P, Qfalse, rand_int(), rand_range(), rb_scan_args(), rb_to_int(), and v.

Referenced by Init_Random().

static VALUE rb_f_srand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |

static

Definition at line 775 of file random.c.

References default_rand, rb_random_t::mt, rand_init(), random_seed(), rb_scan_args(), rb_secure(), and rb_random_t::seed.

Referenced by Init_Random().

unsigned int rb_genrand_int32 | ( | void |  | ) |

Definition at line 249 of file random.c.

References default_mt(), and genrand_int32().

double rb_genrand_real | ( | void |  | ) |

Definition at line 256 of file random.c.

References default_mt(), and genrand_real().

unsigned long rb_genrand_ulong_limited | ( | unsigned long | limit | ) |

Definition at line 887 of file random.c.

References default_mt(), and limited_rand().

Referenced by big_sparse_p().

st_index_t rb_hash_start | ( | st_index_t | h | ) |

Definition at line 1301 of file random.c.

References hashseed, and st_hash_start.

Referenced by match_hash(), method_hash(), proc_hash(), rb_any_hash(), rb_memhash(), rb_obj_hash(), and recursive_hash().

VALUE rb_random_bytes | ( | VALUE | obj,
|  | long | n
| ) |  |

Definition at line 937 of file random.c.

References CHAR_BIT, genrand_int32(), i, id_bytes, len, LONG2NUM, rb_random_t::mt, rb_funcall2(), rb_str_new(), RSTRING_PTR, SIZEOF_INT32, and try_get_rnd().

Referenced by random_bytes().

unsigned int rb_random_int32 | ( | VALUE | obj | ) |

Definition at line 893 of file random.c.

References genrand_int32(), id_rand, INT2FIX, rb_random_t::mt, NUM2ULONG, rb_big_plus(), rb_funcall2(), try_get_rnd(), and ULONG2NUM().

double rb_random_real | ( | VALUE | obj | ) |

Definition at line 910 of file random.c.

References genrand_real(), id_rand, rb_random_t::mt, NUM2DBL, rb_eRangeError, rb_funcall2(), rb_raise(), try_get_rnd(), and v.

Referenced by rb_ary_sample().

void rb_reset_random_seed | ( | void |  | ) |

Definition at line 1317 of file random.c.

References default_rand, INT2FIX, rb_random_t::mt, rb_random_t::seed, and uninit_genrand.

Referenced by rb_thread_atfork().

static rb_random_t* try_get_rnd | ( | VALUE | obj | ) |

static

Definition at line 370 of file random.c.

References DATA_PTR, NULL, rand_start(), rb_cRandom, and rb_typeddata_is_kind_of().

Referenced by rb_random_bytes(), rb_random_int32(), and rb_random_real().

## Variable Documentation

rb_random_t default_rand

static

Definition at line 227 of file random.c.

Referenced by Init_RandomSeed(), rb_f_srand(), and rb_reset_random_seed().

st_index_t hashseed

static

Definition at line 1261 of file random.c.

Referenced by Init_RandomSeed(), and rb_hash_start().

ID id_bytes

static

Definition at line 330 of file random.c.

Referenced by Init_Random(), and rb_random_bytes().

ID id_rand

static

Definition at line 330 of file random.c.

Referenced by Init_Random(), rb_random_int32(), and rb_random_real().

const rb_data_type_t random_data_type

static

Initial value:
= {
"random",
{
random_mark,
random_free,
random_memsize,
},
}

Definition at line 352 of file random.c.

VALUE rb_cRandom

Definition at line 326 of file random.c.

VALUE rb_Random_DEFAULT

static

Definition at line 327 of file random.c.

Referenced by Init_Random(), and random_s_rand().