dSFMT: dSFMT.c File Reference

dSFMT 2.2

- Main Page
- Data Structures
- Files

- File List
- Globals

Functions | Variables
dSFMT.c File Reference

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

`#include <stdio.h>`
`#include <string.h>`
`#include <stdlib.h>`
`#include "dSFMT-params.h"`
`#include "dSFMT-common.h"`

## Functions
static uint32_t | ini_func1 (uint32_t x)
| This function represents a function used in the initialization by init_by_array.
static uint32_t | ini_func2 (uint32_t x)
| This function represents a function used in the initialization by init_by_array.
static void | gen_rand_array_c1o2 (dsfmt_t *dsfmt, w128_t *array, int size)
| This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.
static void | gen_rand_array_c0o1 (dsfmt_t *dsfmt, w128_t *array, int size)
| This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.
static void | gen_rand_array_o0c1 (dsfmt_t *dsfmt, w128_t *array, int size)
| This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.
static void | gen_rand_array_o0o1 (dsfmt_t *dsfmt, w128_t *array, int size)
| This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.
static int | idxof (int i)
| This function simulate a 32-bit array index overlapped to 64-bit array of LITTLE ENDIAN in BIG ENDIAN machine.
static void | initial_mask (dsfmt_t *dsfmt)
| This function initializes the internal state array to fit the IEEE 754 format.
static void | period_certification (dsfmt_t *dsfmt)
| This function certificate the period of 2^{SFMT_MEXP}-1.
static void | convert_c0o1 (w128_t *w)
| This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range [0, 1).
static void | convert_o0c1 (w128_t *w)
| This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range (0, 1].
static void | convert_o0o1 (w128_t *w)
| This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range (0, 1).
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.
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_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_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_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.
## Variables
dsfmt_t | dsfmt_global_data
| dsfmt internal state vector
static const int | dsfmt_mexp = DSFMT_MEXP
| dsfmt mexp for check

## Detailed Description

double precision SIMD-oriented Fast Mersenne Twister (dSFMT) 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

## Function Documentation

static void convert_c0o1 | ( | w128_t * | w | ) | `[inline, static]`

This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range [0, 1).

Parameters:

  w | 128bit stracture of double precision floating point numbers (I/O)

References W128_T::d.

Referenced by gen_rand_array_c0o1().

static void convert_o0c1 | ( | w128_t * | w | ) | `[inline, static]`

This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range (0, 1].

Parameters:

  w | 128bit stracture of double precision floating point numbers (I/O)

References W128_T::d.

Referenced by gen_rand_array_o0c1().

static void convert_o0o1 | ( | w128_t * | w | ) | `[inline, static]`

This function converts the double precision floating point numbers which distribute uniformly in the range [1, 2) to those which distribute uniformly in the range (0, 1).

Parameters:

  w | 128bit stracture of double precision floating point numbers (I/O)

References W128_T::d, and W128_T::u.

Referenced by gen_rand_array_o0o1().

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

References DSFMT_N, DSFMT_N64, DSFMT_T::idx, idxof(), ini_func1(), ini_func2(), initial_mask(), period_certification(), DSFMT_T::status, and W128_T::u32.

Referenced by dsfmt_init_by_array().

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

References DSFMT_N, DSFMT_N64, DSFMT_T::idx, idxof(), initial_mask(), period_certification(), DSFMT_T::status, and W128_T::u32.

Referenced by dsfmt_init_gen_rand().

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.

References DSFMT_N64, and gen_rand_array_c1o2().

Referenced by dsfmt_gv_fill_array_close1_open2().

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()

References DSFMT_N64, and gen_rand_array_c0o1().

Referenced by dsfmt_gv_fill_array_close_open().

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()

References DSFMT_N64, and gen_rand_array_o0c1().

Referenced by dsfmt_gv_fill_array_open_close().

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()

References DSFMT_N64, and gen_rand_array_o0o1().

Referenced by dsfmt_gv_fill_array_open_open().

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.

References do_recursion(), DSFMT_N, and DSFMT_T::status.

Referenced by dsfmt_genrand_close1_open2(), dsfmt_genrand_open_open(), and dsfmt_genrand_uint32().

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.

Referenced by get_idstring().

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.

References DSFMT_N64.

Referenced by get_min_array_size().

static void gen_rand_array_c0o1 | ( | dsfmt_t * | dsfmt,
|  | w128_t * | array,
|  | int | size
| ) |  | `[inline, static]`

This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.

Parameters:

  dsfmt | dsfmt state vector.
  array | an 128-bit array to be filled by pseudorandom numbers.
  size | number of 128-bit pseudorandom numbers to be generated.

References convert_c0o1(), do_recursion(), DSFMT_N, and DSFMT_T::status.

Referenced by dsfmt_fill_array_close_open().

static void gen_rand_array_c1o2 | ( | dsfmt_t * | dsfmt,
|  | w128_t * | array,
|  | int | size
| ) |  | `[inline, static]`

This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.

Parameters:

  dsfmt | dsfmt state vector.
  array | an 128-bit array to be filled by pseudorandom numbers.
  size | number of 128-bit pseudorandom numbers to be generated.

References do_recursion(), DSFMT_N, and DSFMT_T::status.

Referenced by dsfmt_fill_array_close1_open2().

static void gen_rand_array_o0c1 | ( | dsfmt_t * | dsfmt,
|  | w128_t * | array,
|  | int | size
| ) |  | `[inline, static]`

This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.

Parameters:

  dsfmt | dsfmt state vector.
  array | an 128-bit array to be filled by pseudorandom numbers.
  size | number of 128-bit pseudorandom numbers to be generated.

References convert_o0c1(), do_recursion(), DSFMT_N, and DSFMT_T::status.

Referenced by dsfmt_fill_array_open_close().

static void gen_rand_array_o0o1 | ( | dsfmt_t * | dsfmt,
|  | w128_t * | array,
|  | int | size
| ) |  | `[inline, static]`

This function fills the user-specified array with double precision floating point pseudorandom numbers of the IEEE 754 format.

Parameters:

  dsfmt | dsfmt state vector.
  array | an 128-bit array to be filled by pseudorandom numbers.
  size | number of 128-bit pseudorandom numbers to be generated.

References convert_o0o1(), do_recursion(), DSFMT_N, and DSFMT_T::status.

Referenced by dsfmt_fill_array_open_open().

static int idxof | ( | int | i | ) | `[inline, static]`

This function simulate a 32-bit array index overlapped to 64-bit array of LITTLE ENDIAN in BIG ENDIAN machine.

Referenced by dsfmt_chk_init_by_array(), and dsfmt_chk_init_gen_rand().

static uint32_t ini_func1 | ( | uint32_t | x | ) | `[inline, static]`

This function represents a function used in the initialization by init_by_array.

Parameters:

  x | 32-bit integer

Returns:
  32-bit integer

Referenced by dsfmt_chk_init_by_array().

static uint32_t ini_func2 | ( | uint32_t | x | ) | `[inline, static]`

This function represents a function used in the initialization by init_by_array.

Parameters:

  x | 32-bit integer

Returns:
  32-bit integer

Referenced by dsfmt_chk_init_by_array().

static void initial_mask | ( | dsfmt_t * | dsfmt | ) | `[static]`

This function initializes the internal state array to fit the IEEE 754 format.

Parameters:

  dsfmt | dsfmt state vector.

References DSFMT_N, DSFMT_T::status, and W128_T::u.

Referenced by dsfmt_chk_init_by_array(), and dsfmt_chk_init_gen_rand().

static void period_certification | ( | dsfmt_t * | dsfmt | ) | `[static]`

This function certificate the period of 2^{SFMT_MEXP}-1.

Parameters:

  dsfmt | dsfmt state vector.

References DSFMT_N, DSFMT_T::status, and W128_T::u.

Referenced by dsfmt_chk_init_by_array(), and dsfmt_chk_init_gen_rand().

## Variable Documentation

dsfmt_t dsfmt_global_data

dsfmt internal state vector

const int dsfmt_mexp = DSFMT_MEXP`[static]`

dsfmt mexp for check