00001 #pragma once 00002 #ifndef MERSENNETWISTER_H 00003 #define MERSENNETWISTER_H 00004 00005 #include "./RandomGenerator.h" 00006 #include "../../Common/types.h" 00007 00008 #include <valarray> 00009 using namespace std; 00010 00011 class MersenneTwister : public RandomGenerator 00012 { 00013 public: 00014 00017 MersenneTwister(LongNatural seed=0); 00018 MersenneTwister(const valarray<LongNatural>& seeds); 00019 ~MersenneTwister(); 00021 inline Real getUniform() {return (Real(GetOneRandomInteger()) + 0.5)/4294967296.0;} 00023 LongNatural GetOneRandomInteger() ; 00025 VeryLongNatural Max(); 00026 LongNatural Min(); 00027 void SetSeed(LongNatural seed); 00028 00029 private: 00030 LongInteger seed; 00031 valarray<LongNatural> mt; 00032 LongNatural mti; 00033 }; 00034 00035 #endif