Defines | Functions

Rand.cpp File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Rand.h"
Include dependency graph for Rand.cpp:

Go to the source code of this file.

Defines

#define N   (624)
#define M   (397)
#define K   (0x9908B0DFU)
#define hiBit(u)   ((u) & 0x80000000U)
#define loBit(u)   ((u) & 0x00000001U)
#define loBits(u)   ((u) & 0x7FFFFFFFU)
#define mixBits(u, v)   (hiBit(u)|loBits(v))

Functions

void seedMT (unsigned int seed, unsigned int *state, unsigned int *&next, int &left)
unsigned int reloadMT (unsigned int *state, unsigned int *&next, int &left)
unsigned int randomMT (unsigned int *state, unsigned int *&next, int &left)
void fillBufferMT (void *buffer, unsigned int bytes, unsigned int *state, unsigned int *&next, int &left)
float frandomMT (unsigned int *state, unsigned int *&next, int &left)
void seedMT (unsigned int seed)
unsigned int reloadMT (void)
unsigned int randomMT (void)
float frandomMT (void)
void fillBufferMT (void *buffer, unsigned int bytes)

Define Documentation

#define hiBit (   u  )     ((u) & 0x80000000U)

Definition at line 56 of file Rand.cpp.

#define K   (0x9908B0DFU)

Definition at line 55 of file Rand.cpp.

#define loBit (   u  )     ((u) & 0x00000001U)

Definition at line 57 of file Rand.cpp.

#define loBits (   u  )     ((u) & 0x7FFFFFFFU)

Definition at line 58 of file Rand.cpp.

#define M   (397)

Definition at line 54 of file Rand.cpp.

#define mixBits (   u,
  v 
)    (hiBit(u)|loBits(v))

Definition at line 59 of file Rand.cpp.

#define N   (624)

Grabbed by Kevin from http://www.math.keio.ac.jp/~matumoto/cokus.c This is the ``Mersenne Twister'' random number generator MT19937, which generates pseudorandom integers uniformly distributed in 0..(2^32 - 1) starting from any odd seed in 0..(2^32 - 1). This version is a recode by Shawn Cokus (Cokus@math.washington.edu) on March 8, 1998 of a version by Takuji Nishimura (who had suggestions from Topher Cooper and Marc Rieffel in July-August 1997).

Effectiveness of the recoding (on Goedel2.math.washington.edu, a DEC Alpha running OSF/1) using GCC -O3 as a compiler: before recoding: 51.6 sec. to generate 300 million random numbers; after recoding: 24.0 sec. for the same (i.e., 46.5% of original time), so speed is now about 12.5 million random number generations per second on this machine.

According to the URL <http://www.math.keio.ac.jp/~matumoto/emt.html> (and paraphrasing a bit in places), the Mersenne Twister is ``designed with consideration of the flaws of various existing generators,'' has a period of 2^19937 - 1, gives a sequence that is 623-dimensionally equidistributed, and ``has passed many stringent tests, including the die-hard test of G. Marsaglia and the load test of P. Hellekalek and S. Wegenkittl.'' It is efficient in memory usage (typically using 2506 to 5012 bytes of static data, depending on data type sizes, and the code is quite short as well). It generates random numbers in batches of 624 at a time, so the caching and pipelining of modern systems is exploited. It is also divide- and mod-free.

Licensing is free http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/elicense.html

The code as Shawn received it included the following notice:

Copyright (C) 1997 Makoto Matsumoto and Takuji Nishimura. When you use this, send an e-mail to <matumoto@math.keio.ac.jp> with an appropriate reference to your work.

It would be nice to CC: <Cokus@math.washington.edu> when you write.

Definition at line 53 of file Rand.cpp.


Function Documentation

void fillBufferMT ( void *  buffer,
unsigned int  bytes,
unsigned int *  state,
unsigned int *&  next,
int &  left 
)

Definition at line 202 of file Rand.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void fillBufferMT ( void *  buffer,
unsigned int  bytes 
)

Randomizes a buffer

Note:
not threadSafe, use an instance of RakNetRandom if necessary per thread

Definition at line 88 of file Rand.cpp.

Here is the call graph for this function:

float frandomMT ( void   ) 

Gets a random float

Note:
not threadSafe, use an instance of RakNetRandom if necessary per thread
Returns:
0 to 1.0f, inclusive

Definition at line 84 of file Rand.cpp.

Here is the call graph for this function:

float frandomMT ( unsigned int *  state,
unsigned int *&  next,
int &  left 
)

Definition at line 217 of file Rand.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned int randomMT ( unsigned int *  state,
unsigned int *&  next,
int &  left 
)

Definition at line 181 of file Rand.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned int randomMT ( void   ) 

Gets a random unsigned int

Note:
not threadSafe, use an instance of RakNetRandom if necessary per thread
Returns:
an integer random value.

Definition at line 80 of file Rand.cpp.

Here is the call graph for this function:

unsigned int reloadMT ( void   ) 

Definition at line 76 of file Rand.cpp.

Here is the call graph for this function:

unsigned int reloadMT ( unsigned int *  state,
unsigned int *&  next,
int &  left 
)

Definition at line 153 of file Rand.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

void seedMT ( unsigned int  seed,
unsigned int *  state,
unsigned int *&  next,
int &  left 
)

Definition at line 93 of file Rand.cpp.

Here is the caller graph for this function:

void seedMT ( unsigned int  seed  ) 

Initialise seed for Random Generator

Note:
not threadSafe, use an instance of RakNetRandom if necessary per thread
Parameters:
[in] seed The seed value for the random number generator.

Definition at line 72 of file Rand.cpp.

Here is the call graph for this function: