Imagine++
Random.h
1 // ===========================================================================
2 // Imagine++ Libraries
3 // Copyright (C) Imagine
4 // For detailed information: http://imagine.enpc.fr/software
5 // ===========================================================================
6 
7 namespace Imagine {
10 
11 
18  inline void initRandom(unsigned int s)
19  {
20  std::srand(s);
21  std::rand(); // The first one is strange (Visual 2003)
22  }
28  inline void initRandom()
29  {
30  initRandom((unsigned int)std::time(0));
31  }
38  inline double doubleRandom()
39  {
40 #if (RAND_MAX==0x7fff) // 15 bits? This is really too small!!
41  int a = std::rand()<<15;
42  int b = std::rand();
43  return double(a|b)/((RAND_MAX<<15)|RAND_MAX);
44 #else
45  return double(std::rand())/RAND_MAX;
46 #endif
47  }
55  inline int intRandom(int a,int b)
56  {
57  return int(a+(b-a+.999)*doubleRandom());
58  }
66  inline unsigned int uintRandom(unsigned int a)
67  {
68  return (unsigned int)((a+.999)*doubleRandom());
69  }
77  inline size_t size_tRandom(size_t a)
78  {
79  return (size_t)((a+.999)*doubleRandom());
80  }
87  inline double gaussianRandom()
88  {
89  double x; // 1st draw
90  do
91  x=doubleRandom();
92  while (x==0);
93 #ifdef M_PI
94  double pi=M_PI;
95 #else
96  double pi=3.1415926535897932384626433832795;
97 #endif
98  return double(std::sqrt(-2*std::log(x))*std::cos(2*pi*doubleRandom()));
99  }
100 
101 
103 }
void initRandom(unsigned int s)
Init with seed.
Definition: Random.h:18
size_t size_tRandom(size_t a)
Uniform size_t.
Definition: Random.h:77
double doubleRandom()
Uniform double.
Definition: Random.h:38
double gaussianRandom()
Normal law.
Definition: Random.h:87
Imagine++ namespace.
Definition: Array.h:7
int intRandom(int a, int b)
Uniform int.
Definition: Random.h:55
unsigned int uintRandom(unsigned int a)
Uniform unsigned int.
Definition: Random.h:66