- Main Page
- Data Structures
- Files

- File List
- Globals

# dSFMT.h File Reference

double precision SIMD oriented Fast Mersenne Twister(dSFMT) pseudorandom number generator based on IEEE 754 format. More...

`#include <stdio.h>`
`#include <assert.h>`
`#include "dSFMT-params.h"`
`#include <inttypes.h>`

Go to the source code of this file.

## Data Structures
union | W128_T
| 128-bit data structure More...
struct | DSFMT_T
| the 128-bit internal state array More...
## Defines
#define | inline
#define | PRIu64 "llu"
#define | PRIx64 "llx"
#define | UINT64_C(v) (v ## ULL)
#define | DSFMT_PRE_INLINE inline static
#define | DSFMT_PST_INLINE
## Typedefs
typedef W128_T | w128_t
| 128-bit data type
typedef DSFMT_T | dsfmt_t
## Functions
void | dsfmt_gen_rand_all (dsfmt_t *dsfmt)
| This function fills the internal state array with double precision floating point pseudorandom numbers of the IEEE 754 format.
void | dsfmt_fill_array_open_close (dsfmt_t *dsfmt, double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1] to the specified array[] by one call.
void | dsfmt_fill_array_close_open (dsfmt_t *dsfmt, double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range [0, 1) to the specified array[] by one call.
void | dsfmt_fill_array_open_open (dsfmt_t *dsfmt, double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1) to the specified array[] by one call.
void | dsfmt_fill_array_close1_open2 (dsfmt_t *dsfmt, double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range [1, 2) to the specified array[] by one call.
void | dsfmt_chk_init_gen_rand (dsfmt_t *dsfmt, uint32_t seed, int mexp)
| This function initializes the internal state array with a 32-bit integer seed.
void | dsfmt_chk_init_by_array (dsfmt_t *dsfmt, uint32_t init_key[], int key_length, int mexp)
| This function initializes the internal state array, with an array of 32-bit integers used as the seeds.
const char * | dsfmt_get_idstring (void)
| This function returns the identification string.
int | dsfmt_get_min_array_size (void)
| This function returns the minimum size of array used for fill_array functions.
DSFMT_PRE_INLINE double | dsfmt_genrand_close1_open2 (dsfmt_t *dsfmt)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).
DSFMT_PRE_INLINE double | dsfmt_genrand_close_open (dsfmt_t *dsfmt)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).
DSFMT_PRE_INLINE double | dsfmt_genrand_open_close (dsfmt_t *dsfmt)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].
DSFMT_PRE_INLINE double | dsfmt_genrand_open_open (dsfmt_t *dsfmt)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).
DSFMT_PRE_INLINE double | dsfmt_gv_genrand_close1_open2 (void)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).
DSFMT_PRE_INLINE double | dsfmt_gv_genrand_close_open (void)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).
DSFMT_PRE_INLINE double | dsfmt_gv_genrand_open_close (void)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].
DSFMT_PRE_INLINE double | dsfmt_gv_genrand_open_open (void)
| This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).
DSFMT_PRE_INLINE void | dsfmt_gv_fill_array_open_close (double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1] to the specified array[] by one call.
DSFMT_PRE_INLINE void | dsfmt_gv_fill_array_close_open (double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range [0, 1) to the specified array[] by one call.
DSFMT_PRE_INLINE void | dsfmt_gv_fill_array_open_open (double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1) to the specified array[] by one call.
DSFMT_PRE_INLINE void | dsfmt_gv_fill_array_close1_open2 (double array[], int size)
| This function generates double precision floating point pseudorandom numbers which distribute in the range [1, 2) to the specified array[] by one call.
DSFMT_PRE_INLINE void | dsfmt_gv_init_gen_rand (uint32_t seed)
| This function initializes the internal state array with a 32-bit integer seed.
DSFMT_PRE_INLINE void | dsfmt_gv_init_by_array (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.
DSFMT_PRE_INLINE void | dsfmt_init_gen_rand (dsfmt_t *dsfmt, uint32_t seed)
| This function initializes the internal state array with a 32-bit integer seed.
DSFMT_PRE_INLINE void | dsfmt_init_by_array (dsfmt_t *dsfmt, 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.
DSFMT_PRE_INLINE const char * | get_idstring (void)
| This function is just the same as dsfmt_get_idstring().
DSFMT_PRE_INLINE int | get_min_array_size (void)
| This function is just the same as dsfmt_get_min_array_size().
DSFMT_PRE_INLINE void | init_gen_rand (uint32_t seed)
| This function is just the same as dsfmt_gv_init_gen_rand().
DSFMT_PRE_INLINE void | init_by_array (uint32_t init_key[], int key_length)
| This function is just the same as dsfmt_gv_init_by_array().
DSFMT_PRE_INLINE double | genrand_close1_open2 (void)
| This function is just the same as dsfmt_gv_genrand_close1_open2().
DSFMT_PRE_INLINE double | genrand_close_open (void)
| This function is just the same as dsfmt_gv_genrand_close_open().
DSFMT_PRE_INLINE double | genrand_open_close (void)
| This function is just the same as dsfmt_gv_genrand_open_close().
DSFMT_PRE_INLINE double | genrand_open_open (void)
| This function is just the same as dsfmt_gv_genrand_open_open().
DSFMT_PRE_INLINE void | fill_array_open_close (double array[], int size)
| This function is juset the same as dsfmt_gv_fill_array_open_close().
DSFMT_PRE_INLINE void | fill_array_close_open (double array[], int size)
| This function is juset the same as dsfmt_gv_fill_array_close_open().
DSFMT_PRE_INLINE void | fill_array_open_open (double array[], int size)
| This function is juset the same as dsfmt_gv_fill_array_open_open().
DSFMT_PRE_INLINE void | fill_array_close1_open2 (double array[], int size)
| This function is juset the same as dsfmt_gv_fill_array_close1_open2().
## Variables
int | dsfmt_global_is_initialized
| dsfmt initialized flag
dsfmt_t | dsfmt_global_data
| dsfmt internal state vector
const int | dsfmt_global_mexp
| dsfmt mexp for check

## Detailed Description

double precision SIMD oriented Fast Mersenne Twister(dSFMT) pseudorandom number generator based on IEEE 754 format.

Author:
  Mutsuo Saito (Hiroshima University)

  Makoto Matsumoto (Hiroshima University)

Copyright (C) 2007, 2008 Mutsuo Saito, Makoto Matsumoto and Hiroshima University. All rights reserved.

The new 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.

## Define Documentation

#define DSFMT_PRE_INLINE inline static

#define DSFMT_PST_INLINE

#define inline

#define PRIu64 "llu"

#define PRIx64 "llx"

#define UINT64_C | ( | v |  | ) | (v ## ULL)

## Typedef Documentation

typedef struct DSFMT_T dsfmt_t

typedef union W128_T w128_t

128-bit data type

## Function Documentation

void dsfmt_chk_init_by_array | ( | dsfmt_t * | dsfmt,
|  | uint32_t | init_key[],
|  | int | key_length,
|  | int | mexp |
| ) |  |  |

This function initializes the internal state array, with an array of 32-bit integers used as the seeds.

Parameters:

  | dsfmt | dsfmt state vector.
  | init_key | the array of 32-bit integers, used as a seed.
  | key_length | the length of init_key.
  | mexp | caller's mersenne expornent

void dsfmt_chk_init_gen_rand | ( | dsfmt_t * | dsfmt,
|  | uint32_t | seed,
|  | int | mexp |
| ) |  |  |

This function initializes the internal state array with a 32-bit integer seed.

Parameters:

  | dsfmt | dsfmt state vector.
  | seed | a 32-bit integer used as the seed.
  | mexp | caller's mersenne expornent

void dsfmt_fill_array_close1_open2 | ( | dsfmt_t * | dsfmt,
|  | double | array[],
|  | int | size |
| ) |  |  |

This function generates double precision floating point pseudorandom numbers which distribute in the range [1, 2) to the specified array[] by one call.

The number of pseudorandom numbers is specified by the argument size, which must be at least (SFMT_MEXP / 128) * 2 and a multiple of two. The function get_min_array_size() returns this minimum size. The generation by this function is much faster than the following fill_array_xxx functions.

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 genrand_xxx functions, without initialization.

Parameters:

  | dsfmt | dsfmt state vector.
  | array | an array where pseudorandom numbers 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 (SFMT_MEXP / 128) * 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.

void dsfmt_fill_array_close_open | ( | dsfmt_t * | dsfmt,
|  | double | array[],
|  | int | size |
| ) |  |  |

This function generates double precision floating point pseudorandom numbers which distribute in the range [0, 1) to the specified array[] by one call.

This function is the same as fill_array_close1_open2() except the distribution range.

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | dsfmt | dsfmt state vector.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  fill_array_close1_open2()

void dsfmt_fill_array_open_close | ( | dsfmt_t * | dsfmt,
|  | double | array[],
|  | int | size |
| ) |  |  |

This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1] to the specified array[] by one call.

This function is the same as fill_array_close1_open2() except the distribution range.

Parameters:

  | dsfmt | dsfmt state vector.
  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  fill_array_close1_open2()

void dsfmt_fill_array_open_open | ( | dsfmt_t * | dsfmt,
|  | double | array[],
|  | int | size |
| ) |  |  |

This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1) to the specified array[] by one call.

This function is the same as fill_array_close1_open2() except the distribution range.

Parameters:

  | dsfmt | dsfmt state vector.
  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  fill_array_close1_open2()

void dsfmt_gen_rand_all | ( | dsfmt_t * | dsfmt | ) |

This function fills the internal state array with double precision floating point pseudorandom numbers of the IEEE 754 format.

Parameters:

  | dsfmt | dsfmt state vector.

static double dsfmt_genrand_close1_open2 | ( | dsfmt_t * | dsfmt | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).

This is the primitive and faster than generating numbers in other ranges. dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called before this function.

Parameters:

  | dsfmt | dsfmt internal state date

Returns:
  double precision floating point pseudorandom number

static double dsfmt_genrand_close_open | ( | dsfmt_t * | dsfmt | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).

dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called before this function.

Parameters:

  | dsfmt | dsfmt internal state date

Returns:
  double precision floating point pseudorandom number

static double dsfmt_genrand_open_close | ( | dsfmt_t * | dsfmt | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].

dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called before this function.

Parameters:

  | dsfmt | dsfmt internal state date

Returns:
  double precision floating point pseudorandom number

static double dsfmt_genrand_open_open | ( | dsfmt_t * | dsfmt | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).

dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called before this function.

Parameters:

  | dsfmt | dsfmt internal state date

Returns:
  double precision floating point pseudorandom number

const char* dsfmt_get_idstring | ( | void |  | ) |

This function returns the identification string.

The string shows the Mersenne exponent, and all parameters of this generator.

Returns:
  id string.

int dsfmt_get_min_array_size | ( | void |  | ) |

This function returns the minimum size of array used for fill_array functions.

Returns:
  minimum size of array used for fill_array functions.

static void dsfmt_gv_fill_array_close1_open2 | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function generates double precision floating point pseudorandom numbers which distribute in the range [1, 2) to the specified array[] by one call.

This function is the same as dsfmt_fill_array_close1_open2() except that this function uses global variables.

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_fill_array_close1_open2()

static void dsfmt_gv_fill_array_close_open | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function generates double precision floating point pseudorandom numbers which distribute in the range [0, 1) to the specified array[] by one call.

This function is the same as dsfmt_gv_fill_array_close1_open2() except the distribution range. This function uses global variables.

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_fill_array_close1_open2()

  dsfmt_gv_fill_array_close1_open2()

static void dsfmt_gv_fill_array_open_close | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1] to the specified array[] by one call.

This function is the same as dsfmt_gv_fill_array_close1_open2() except the distribution range. This function uses global variables.

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_fill_array_close1_open2() and

  dsfmt_gv_fill_array_close1_open2()

static void dsfmt_gv_fill_array_open_open | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function generates double precision floating point pseudorandom numbers which distribute in the range (0, 1) to the specified array[] by one call.

This function is the same as dsfmt_gv_fill_array_close1_open2() except the distribution range. This function uses global variables.

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_fill_array_close1_open2()

  dsfmt_gv_fill_array_close1_open2()

static double dsfmt_gv_genrand_close1_open2 | ( | void |  | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).

This is the primitive and faster than generating numbers in other ranges. dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called before this function. This function uses global variables.

Returns:
  double precision floating point pseudorandom number

static double dsfmt_gv_genrand_close_open | ( | void |  | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).

dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called before this function. This function uses global variables.

Returns:
  double precision floating point pseudorandom number

static double dsfmt_gv_genrand_open_close | ( | void |  | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].

dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called before this function. This function uses global variables.

Returns:
  double precision floating point pseudorandom number

static double dsfmt_gv_genrand_open_open | ( | void |  | ) | `[inline]`

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).

dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called before this function. This function uses global variables.

Returns:
  double precision floating point pseudorandom number

static void dsfmt_gv_init_by_array | ( | uint32_t | init_key[],
|  | int | key_length |
| ) |  |  | `[inline]`

This function initializes the internal state array, with an array of 32-bit integers used as the seeds.

This function uses global variables.

Parameters:

  | init_key | the array of 32-bit integers, used as a seed.
  | key_length | the length of init_key. see also

See also:
  dsfmt_init_by_array()

static void dsfmt_gv_init_gen_rand | ( | uint32_t | seed | ) | `[inline]`

This function initializes the internal state array with a 32-bit integer seed.

This function uses global variables.

Parameters:

  | seed | a 32-bit integer used as the seed. see also

See also:
  dsfmt_init_gen_rand()

static void dsfmt_init_by_array | ( | dsfmt_t * | dsfmt,
|  | uint32_t | init_key[],
|  | int | key_length |
| ) |  |  | `[inline]`

This function initializes the internal state array, with an array of 32-bit integers used as the seeds.

Parameters:

  | dsfmt | dsfmt state vector
  | init_key | the array of 32-bit integers, used as a seed.
  | key_length | the length of init_key.

static void dsfmt_init_gen_rand | ( | dsfmt_t * | dsfmt,
|  | uint32_t | seed |
| ) |  |  | `[inline]`

This function initializes the internal state array with a 32-bit integer seed.

Parameters:

  | dsfmt | dsfmt state vector.
  | seed | a 32-bit integer used as the seed.

static void fill_array_close1_open2 | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function is juset the same as dsfmt_gv_fill_array_close1_open2().

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_fill_array_close1_open2(),

  dsfmt_gv_fill_array_close1_open2()

static void fill_array_close_open | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function is juset the same as dsfmt_gv_fill_array_close_open().

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_gv_fill_array_close_open(),

  dsfmt_fill_array_close1_open2(),

  dsfmt_gv_fill_array_close1_open2()

static void fill_array_open_close | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function is juset the same as dsfmt_gv_fill_array_open_close().

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_gv_fill_array_open_close(),

  dsfmt_fill_array_close1_open2(),

  dsfmt_gv_fill_array_close1_open2()

static void fill_array_open_open | ( | double | array[],
|  | int | size |
| ) |  |  | `[inline]`

This function is juset the same as dsfmt_gv_fill_array_open_open().

Parameters:

  | array | an array where pseudorandom numbers are filled by this function.
  | size | the number of pseudorandom numbers to be generated. see also

See also:
  dsfmt_gv_fill_array_open_open(),

  dsfmt_fill_array_close1_open2(),

  dsfmt_gv_fill_array_close1_open2()

static double genrand_close1_open2 | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_gv_genrand_close1_open2().

Returns:
  double precision floating point number. see also

See also:
  dsfmt_genrand_close1_open2()

  dsfmt_gv_genrand_close1_open2()

static double genrand_close_open | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_gv_genrand_close_open().

Returns:
  double precision floating point number. see also

See also:
  dsfmt_genrand_close_open()

  dsfmt_gv_genrand_close_open()

static double genrand_open_close | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_gv_genrand_open_close().

Returns:
  double precision floating point number. see also

See also:
  dsfmt_genrand_open_close()

  dsfmt_gv_genrand_open_close()

static double genrand_open_open | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_gv_genrand_open_open().

Returns:
  double precision floating point number. see also

See also:
  dsfmt_genrand_open_open()

  dsfmt_gv_genrand_open_open()

static const char * get_idstring | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_get_idstring().

Returns:
  id string. see also

See also:
  dsfmt_get_idstring()

static int get_min_array_size | ( | void |  | ) | `[inline]`

This function is just the same as dsfmt_get_min_array_size().

Returns:
  minimum size of array used for fill_array functions. see also

See also:
  dsfmt_get_min_array_size()

static void init_by_array | ( | uint32_t | init_key[],
|  | int | key_length |
| ) |  |  | `[inline]`

This function is just the same as dsfmt_gv_init_by_array().

Parameters:

  | init_key | the array of 32-bit integers, used as a seed.
  | key_length | the length of init_key. see also

See also:
  dsfmt_gv_init_by_array(),

  dsfmt_init_by_array().

static void init_gen_rand | ( | uint32_t | seed | ) | `[inline]`

This function is just the same as dsfmt_gv_init_gen_rand().

Parameters:

  | seed | a 32-bit integer used as the seed. see also

See also:
  dsfmt_gv_init_gen_rand(),

  dsfmt_init_gen_rand().

## Variable Documentation

dsfmt_t dsfmt_global_data

dsfmt internal state vector

int dsfmt_global_is_initialized

dsfmt initialized flag

const int dsfmt_global_mexp

dsfmt mexp for check