uint64_t rand64(tinymt64_t *state, uint64_t n) { uint64_t x, max = ~UINT64_C(0); max -= max % n; do { x = tinymt64_generate_uint64(state); } while (x >= max); return x % n; }
url_request *urls_request(tinymt64_t *rand) { switch (urls2.count) { case 0: return NULL; case 1: return urls2.requests[0]; } uint64_t n = tinymt64_generate_uint64(rand); return urls2.requests[n % urls2.count]; }
int main(int argc, char * argv[]) { tinymt64_t tinymt; tinymt.mat1 = strtoul("2406486510", NULL, 16); tinymt.mat2 = strtoul("4235788063", NULL, 16); tinymt.tmat = strtoul("932445695", NULL, 16); int seed = 1; uint64_t seed_array[5]; if (argc >= 5) { seed = strtol(argv[4], NULL, 0); } printf("tinymt64 0x%08"PRIx32, tinymt.mat1); printf(" 0x%08"PRIx32, tinymt.mat2); printf(" 0x%016"PRIx64, tinymt.tmat); printf(" seed = %d\n", seed); tinymt64_init(&tinymt, seed); printf("64-bit unsigned integers r, where 0 <= r < 2^64\n"); for (int i = 0; i < 10; i++) { for (int j = 0; j < 3; j++) { printf("%20"PRIu64" ", tinymt64_generate_uint64(&tinymt)); } printf("\n"); } printf("init_by_array {%d}\n", seed); seed_array[0] = seed; tinymt64_init_by_array(&tinymt, seed_array, 1); printf("double numbers r, where 0.0 <= r < 1.0\n"); for (int i = 0; i < 12; i++) { for (int j = 0; j < 4; j++) { printf("%.15f ", tinymt64_generate_double(&tinymt)); } printf("\n"); } printf("double numbers r, where 1.0 <= r < 2.0\n"); for (int i = 0; i < 12; i++) { for (int j = 0; j < 4; j++) { printf("%.15f ", tinymt64_generate_double12(&tinymt)); } printf("\n"); } printf("double numbers r, where 0.0 < r <= 1.0\n"); for (int i = 0; i < 12; i++) { for (int j = 0; j < 4; j++) { printf("%.15f ", tinymt64_generate_doubleOC(&tinymt)); } printf("\n"); } printf("double numbers r, where 0.0 <= r < 1.0\n"); for (int i = 0; i < 12; i++) { for (int j = 0; j < 4; j++) { printf("%.15f ", tinymt64_generate_doubleOO(&tinymt)); } printf("\n"); } }
UInt64 Random::next64() { return tinymt64_generate_uint64((tinymt64_t *)randState); }
/* generates a random int64 */ MVMint64 MVM_proc_rand_i(MVMThreadContext *tc) { MVMuint64 result = tinymt64_generate_uint64(tc->rand_state); return *(MVMint64 *)&result; }