/Users/richardeakin/projects/libsms/trunk/src/SFMT.h File Reference

SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom number generator. More...

#include <stdio.h>
#include <inttypes.h>
Include dependency graph for SFMT.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define PRIu64   "llu"
#define PRIx64   "llx"
#define ALWAYSINLINE
#define PRE_ALWAYS   inline

Functions

uint32_t gen_rand32 (void)
uint64_t gen_rand64 (void)
void fill_array32 (uint32_t *array, int size)
void fill_array64 (uint64_t *array, int size)
void init_gen_rand (uint32_t seed)
void init_by_array (uint32_t *init_key, int key_length)
const char * get_idstring (void)
int get_min_array_size32 (void)
int get_min_array_size64 (void)
static double to_real1 (uint32_t v)
static double genrand_real1 (void)
static double to_real2 (uint32_t v)
static double genrand_real2 (void)
static double to_real3 (uint32_t v)
static double genrand_real3 (void)
static double to_res53 (uint64_t v)
static double to_res53_mix (uint32_t x, uint32_t y)
static double genrand_res53 (void)
static double genrand_res53_mix (void)

Detailed Description

SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom number generator.

Author:
Mutsuo Saito (Hiroshima University)
Makoto Matsumoto (Hiroshima University)

Copyright (C) 2006, 2007 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 ALWAYSINLINE
#define PRE_ALWAYS   inline
#define PRIu64   "llu"
#define PRIx64   "llx"

Function Documentation

void fill_array32 ( 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:
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(), idx, and initialized.

Here is the call graph for this function:

void fill_array64 ( 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.

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:
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(), idx, and initialized.

Here is the call graph for this function:

uint32_t gen_rand32 ( void   ) 

This function generates and returns 32-bit pseudorandom number. init_gen_rand or init_by_array must be called before this function.

Returns:
32-bit pseudorandom number

References gen_rand_all(), idx, initialized, and psfmt32.

Referenced by genrand_real1(), genrand_real2(), genrand_real3(), and genrand_res53_mix().

Here is the call graph for this function:

uint64_t gen_rand64 ( void   ) 

This function generates and returns 64-bit pseudorandom number. init_gen_rand or init_by_array must be called before this function. The function gen_rand64 should not be called after gen_rand32, unless an initialization is again executed.

Returns:
64-bit pseudorandom number

References gen_rand_all(), idx, initialized, psfmt32, and psfmt64.

Referenced by genrand_res53().

Here is the call graph for this function:

static double genrand_real1 ( void   )  [inline, static]

generates a random number on [0,1]-real-interval

References gen_rand32(), and to_real1().

Referenced by sms_random().

Here is the call graph for this function:

static double genrand_real2 ( void   )  [inline, static]

generates a random number on [0,1)-real-interval

References gen_rand32(), and to_real2().

Here is the call graph for this function:

static double genrand_real3 ( void   )  [inline, static]

generates a random number on (0,1)-real-interval

References gen_rand32(), and to_real3().

Here is the call graph for this function:

static double genrand_res53 ( void   )  [inline, static]

generates a random number on [0,1) with 53-bit resolution

References gen_rand64(), and to_res53().

Here is the call graph for this function:

static double genrand_res53_mix ( void   )  [inline, static]

generates a random number on [0,1) with 53-bit resolution using 32bit integer.

References gen_rand32(), and to_res53_mix().

Here is the call graph for this function:

const char* get_idstring ( void   ) 

This function returns the identification string. The string shows the word size, the Mersenne exponent, and all parameters of this generator.

int get_min_array_size32 ( void   ) 

This function returns the minimum size of array used for fill_array32() function.

Returns:
minimum size of array used for fill_array32() function.
int get_min_array_size64 ( void   ) 

This function returns the minimum size of array used for fill_array64() function.

Returns:
minimum size of array used for fill_array64() function.
void 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

Parameters:
init_key the array of 32-bit integers, used as a seed.
key_length the length of init_key.

References func1(), func2(), idx, idxof(), initialized, period_certification(), psfmt32, and sfmt.

Here is the call graph for this function:

void init_gen_rand ( uint32_t  seed  ) 

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

Parameters:
seed a 32-bit integer used as the seed.

References idx, idxof(), initialized, period_certification(), and psfmt32.

Referenced by sms_init().

Here is the call graph for this function:

static double to_real1 ( uint32_t  v  )  [inline, static]

generates a random number on [0,1]-real-interval

Referenced by genrand_real1().

static double to_real2 ( uint32_t  v  )  [inline, static]

generates a random number on [0,1)-real-interval

Referenced by genrand_real2().

static double to_real3 ( uint32_t  v  )  [inline, static]

generates a random number on (0,1)-real-interval

Referenced by genrand_real3().

static double to_res53 ( uint64_t  v  )  [inline, static]

These real versions are due to Isaku Wada generates a random number on [0,1) with 53-bit resolution

Referenced by genrand_res53(), and to_res53_mix().

static double to_res53_mix ( uint32_t  x,
uint32_t  y 
) [inline, static]

generates a random number on [0,1) with 53-bit resolution from two 32 bit integers

References to_res53().

Referenced by genrand_res53_mix().

Here is the call graph for this function:

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on Thu Oct 29 04:08:07 2009 for libsms by  doxygen 1.6.1