SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom number generator using C structure.
More...
|
void | sfmt_fill_array32 (sfmt_t *sfmt, uint32_t *array, int size) |
| This function generates pseudorandom 32-bit integers in the specified array[] by one call. More...
|
|
void | sfmt_fill_array64 (sfmt_t *sfmt, uint64_t *array, int size) |
| This function generates pseudorandom 64-bit integers in the specified array[] by one call. More...
|
|
void | sfmt_init_gen_rand (sfmt_t *sfmt, uint32_t seed) |
| This function initializes the internal state array with a 32-bit integer seed. More...
|
|
void | sfmt_init_by_array (sfmt_t *sfmt, uint32_t *init_key, int key_length) |
| This function initializes the internal state array, with an array of 32-bit integers used as the seeds. More...
|
|
const char * | sfmt_get_idstring (sfmt_t *sfmt) |
| This function returns the identification string. More...
|
|
int | sfmt_get_min_array_size32 (sfmt_t *sfmt) |
| This function returns the minimum size of array used for fill_array32() function. More...
|
|
int | sfmt_get_min_array_size64 (sfmt_t *sfmt) |
| This function returns the minimum size of array used for fill_array64() function. More...
|
|
void | sfmt_gen_rand_all (sfmt_t *sfmt) |
| This function fills the internal state array with pseudorandom integers. More...
|
|
static uint32_t | sfmt_genrand_uint32 (sfmt_t *sfmt) |
| This function generates and returns 32-bit pseudorandom number. More...
|
|
static uint64_t | sfmt_genrand_uint64 (sfmt_t *sfmt) |
| This function generates and returns 64-bit pseudorandom number. More...
|
|
static double | sfmt_to_real1 (uint32_t v) |
| converts an unsigned 32-bit number to a double on [0,1]-real-interval. More...
|
|
static double | sfmt_genrand_real1 (sfmt_t *sfmt) |
| generates a random number on [0,1]-real-interval More...
|
|
static double | sfmt_to_real2 (uint32_t v) |
| converts an unsigned 32-bit integer to a double on [0,1)-real-interval. More...
|
|
static double | sfmt_genrand_real2 (sfmt_t *sfmt) |
| generates a random number on [0,1)-real-interval More...
|
|
static double | sfmt_to_real3 (uint32_t v) |
| converts an unsigned 32-bit integer to a double on (0,1)-real-interval. More...
|
|
static double | sfmt_genrand_real3 (sfmt_t *sfmt) |
| generates a random number on (0,1)-real-interval More...
|
|
static double | sfmt_to_res53 (uint64_t v) |
| converts an unsigned 32-bit integer to double on [0,1) with 53-bit resolution. More...
|
|
static double | sfmt_genrand_res53 (sfmt_t *sfmt) |
| generates a random number on [0,1) with 53-bit resolution More...
|
|
static double | sfmt_to_res53_mix (uint32_t x, uint32_t y) |
| generates a random number on [0,1) with 53-bit resolution from two 32 bit integers More...
|
|
static double | sfmt_genrand_res53_mix (sfmt_t *sfmt) |
| generates a random number on [0,1) with 53-bit resolution using two 32bit integers. More...
|
|
SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom number generator using C structure.
- Author
- Mutsuo Saito (Hiroshima University)
-
Makoto Matsumoto (The University of Tokyo)
Copyright (C) 2006, 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima University. Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, Hiroshima University and The University of Tokyo. All rights reserved.
The 3-clause BSD License is applied to this software, see LICENSE.txt
- Note
- We assume that your system has inttypes.h. If your system doesn't have inttypes.h, you have to typedef uint32_t and uint64_t, and you have to define PRIu64 and PRIx64 in this file as follows:
typedef unsigned int uint32_t
typedef unsigned long long uint64_t
#define PRIu64 "llu"
#define PRIx64 "llx"
uint32_t must be exactly 32-bit unsigned integer type (no more, no less), and uint64_t must be exactly 64-bit unsigned integer type. PRIu64 and PRIx64 are used for printf function to print 64-bit unsigned int and 64-bit unsigned int in hexadecimal format.
void sfmt_fill_array32 |
( |
sfmt_t * |
sfmt, |
|
|
uint32_t * |
array, |
|
|
int |
size |
|
) |
| |
This function generates pseudorandom 32-bit integers in the specified array[] by one call.
The number of pseudorandom integers is specified by the argument size, which must be at least 624 and a multiple of four. The generation by this function is much faster than the following gen_rand function.
For initialization, init_gen_rand or init_by_array must be called before the first call of this function. This function can not be used after calling gen_rand function, without initialization.
- Parameters
-
sfmt | SFMT internal state |
array | an array where pseudorandom 32-bit integers are filled by this function. The pointer to the array must be "aligned" (namely, must be a multiple of 16) in the SIMD version, since it refers to the address of a 128-bit integer. In the standard C version, the pointer is arbitrary. |
size | the number of 32-bit pseudorandom integers to be generated. size must be a multiple of 4, and greater than or equal to (MEXP / 128 + 1) * 4. |
- Note
- memalign or posix_memalign is available to get aligned memory. Mac OSX doesn't have these functions, but malloc of OSX returns the pointer to the aligned memory block.
References gen_rand_array(), and SFMT_T::idx.
void sfmt_fill_array64 |
( |
sfmt_t * |
sfmt, |
|
|
uint64_t * |
array, |
|
|
int |
size |
|
) |
| |
This function generates pseudorandom 64-bit integers in the specified array[] by one call.
The number of pseudorandom integers is specified by the argument size, which must be at least 312 and a multiple of two. The generation by this function is much faster than the following gen_rand function.
- Parameters
-
sfmt | SFMT internal state For initialization, init_gen_rand or init_by_array must be called before the first call of this function. This function can not be used after calling gen_rand function, without initialization. |
array | an array where pseudorandom 64-bit integers are filled by this function. The pointer to the array must be "aligned" (namely, must be a multiple of 16) in the SIMD version, since it refers to the address of a 128-bit integer. In the standard C version, the pointer is arbitrary. |
size | the number of 64-bit pseudorandom integers to be generated. size must be a multiple of 2, and greater than or equal to (MEXP / 128 + 1) * 2 |
- Note
- memalign or posix_memalign is available to get aligned memory. Mac OSX doesn't have these functions, but malloc of OSX returns the pointer to the aligned memory block.
References gen_rand_array(), and SFMT_T::idx.
static uint64_t sfmt_genrand_uint64 |
( |
sfmt_t * |
sfmt | ) |
|
|
inlinestatic |