• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/ECF/SimpleRandomizer.cpp

00001 #include "ECF_base.h"
00002 #include "SimpleRandomizer.h"
00003 #include <time.h>
00004 
00005 
00006 SimpleRandomizer::SimpleRandomizer(unsigned int seed)
00007 {
00008     if(seed == 0)
00009         srand((uint) time(NULL));
00010     else
00011         srand(seed);
00012 }
00013 
00014 
00015 int SimpleRandomizer::getRandomInteger(int p, int q) 
00016 {
00017     return p + (int)( (double)(q-p+1) * (rand() / (RAND_MAX + 1.0)));
00018 }
00019 
00020 
00021 int SimpleRandomizer::getRandomInteger(int size) 
00022 {
00023     return (int)( (double)(size) * (rand() / (RAND_MAX + 1.0)));
00024 }
00025 
00026 
00027 double SimpleRandomizer::getRandomDouble() 
00028 {
00029     return rand() / (double(RAND_MAX));
00030 }
00031 
00032 
00033 void SimpleRandomizer::registerParameters(StateP s) 
00034 {
00035     s->getRegistry()->registerEntry("randomizer.seed", (voidP) new uint(0), ECF::UINT,
00036         "randomizer seed, 0 uses time(NULL) (default: 0)");
00037 }
00038 
00039 
00040 bool SimpleRandomizer::initialize(StateP state)
00041 {
00042     uint seed = 0;
00043     if(state->getRegistry()->isModified("randomizer.seed")) {
00044         voidP sptr = state->getRegistry()->getEntry("randomizer.seed");
00045         seed = *((int*)sptr.get());
00046     }
00047 
00048     if(seed != 0)
00049         srand(seed);
00050     else
00051 #ifdef _MPI
00052         srand((uint) time(NULL) + state->getCommunicator()->getCommRank());
00053 #else
00054         srand((uint) time(NULL));
00055 #endif
00056     return true;
00057 }

Generated on Tue Nov 4 2014 13:04:31 for ECF by  doxygen 1.7.1