ref: fda7b9cf12d964a4a482fc252ef26dc29e7eaed1
dir: /src/random.c/
#include "sl.h" #include "cvalues.h" #include "mt19937-64.h" #include "timefuncs.h" #include "random.h" static mt19937_64 ctx; void randomize(void) { unsigned long long tm = sec_realtime() * 1000.0; init_by_array64(&ctx, &tm, 1); } BUILTIN("rand", rand) { USED(args); USED(nargs); #ifdef BITS64 return fixnum(genrand64_int64(&ctx) >> 3); #else return fixnum(genrand64_int64(&ctx) >> (32+3)); #endif } BUILTIN("rand-u32", rand_u32) { USED(args); USED(nargs); return mk_u32(genrand64_int64(&ctx) >> 32); } BUILTIN("rand-u64", rand_u64) { USED(args); USED(nargs); return mk_u64(genrand64_int64(&ctx)); } BUILTIN("rand-f64", rand_f64) { USED(args); USED(nargs); return mk_f64(genrand64_real1(&ctx)); } BUILTIN("rand-f32", rand_f32) { USED(args); USED(nargs); return mk_f32(genrand64_real1(&ctx)); }