Imagine++
Random.h
1// ===========================================================================
2// Imagine++ Libraries
3// Copyright (C) Imagine
4// For detailed information: http://imagine.enpc.fr/software
5// ===========================================================================
6
7namespace 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
unsigned int uintRandom(unsigned int a)
Uniform unsigned int.
Definition: Random.h:66
double doubleRandom()
Uniform double.
Definition: Random.h:38
size_t size_tRandom(size_t a)
Uniform size_t.
Definition: Random.h:77
double gaussianRandom()
Normal law.
Definition: Random.h:87
int intRandom(int a, int b)
Uniform int.
Definition: Random.h:55
Imagine++ namespace.