00001 /********************************************************** 00002 * Filename: _rand_MT.h 00003 * 00004 * Description: This file contains routines for generating 00005 * random values 00006 * 00007 * Author: Glen Kramer (kramer@cs.ucdavis.edu) 00008 * University of California @ Davis 00009 *********************************************************/ 00010 00011 #ifndef _RAND_MT_H_V001_INCLUDED_ 00012 #define _RAND_MT_H_V001_INCLUDED_ 00013 00014 #include <math.h> 00015 00016 #include "_types.h" 00017 #include "MersenneTwister.h" 00018 00019 //extern MTRand RND; 00020 00021 typedef DOUBLE rnd_real_t; 00022 typedef int32u rnd_int_t; 00023 00024 const rnd_real_t SMALL_VAL = 1.0 / 0xFFFFFFFFUL; 00025 00026 static MTRand RND; 00027 00028 inline void _seed(void) { RND.seed(); } 00029 inline rnd_real_t _uniform_real_0_1(void) /* [0,1] */ { return RND.rand(); } 00030 inline rnd_real_t _uniform_real_0_X1(void) /* [0,1) */ { return RND.randExc(1.0); } 00031 inline rnd_real_t _uniform_real_X0_1(void) /* (0,1] */ { return 1.0 - _uniform_real_0_X1(); } 00032 00033 inline rnd_real_t _uniform_real_(rnd_real_t low, rnd_real_t hi) { return RND.rand( hi - low ) + low; } 00034 inline rnd_int_t _uniform_int_ (rnd_int_t low, rnd_int_t hi) { return RND.randInt( hi - low ) + low; } 00035 00036 inline rnd_real_t _exponent_(void) { return -log( _uniform_real_X0_1() ); } 00037 inline rnd_real_t _pareto_(rnd_real_t shape) { return pow( _uniform_real_X0_1(), -1.0/shape); } 00038 00039 #endif /* _RAND_MT_H_V001_INCLUDED_ */