Imagine++
Imagine
Common
src
Imagine
Common
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
}
23
28
inline
void
initRandom
()
29
{
30
initRandom
((
unsigned
int
)std::time(0));
31
}
32
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
}
48
55
inline
int
intRandom
(
int
a,
int
b)
56
{
57
return
int(a+(b-a+.999)*
doubleRandom
());
58
}
59
66
inline
unsigned
int
uintRandom
(
unsigned
int
a)
67
{
68
return
(
unsigned
int
)((a+.999)*
doubleRandom
());
69
}
70
77
inline
size_t
size_tRandom
(
size_t
a)
78
{
79
return
(
size_t
)((a+.999)*
doubleRandom
());
80
}
81
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
}
Imagine::uintRandom
unsigned int uintRandom(unsigned int a)
Uniform unsigned int.
Definition
Random.h:66
Imagine::initRandom
void initRandom()
Init.
Definition
Random.h:28
Imagine::doubleRandom
double doubleRandom()
Uniform double.
Definition
Random.h:38
Imagine::size_tRandom
size_t size_tRandom(size_t a)
Uniform size_t.
Definition
Random.h:77
Imagine::gaussianRandom
double gaussianRandom()
Normal law.
Definition
Random.h:87
Imagine::intRandom
int intRandom(int a, int b)
Uniform int.
Definition
Random.h:55
Imagine
Imagine++ namespace.
Generated by
1.13.2