MorphoGraphX
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Random.hpp
Go to the documentation of this file.
1 #ifndef RANDOM_HPP
2 #define RANDOM_HPP
3 
9 #include <Config.hpp>
10 
11 #include <Vector.hpp>
12 
13 #ifdef WIN32
14 static long int random() {
15  return rand();
16 }
17 
18 static void srandom(unsigned int seed) {
19  return srand(seed);
20 }
21 #endif
22 
23 namespace mgx {
24 namespace util {
31 mgx_EXPORT unsigned int sran_time();
32 
36 mgx_EXPORT void sran(unsigned int seed);
37 
41 mgx_EXPORT double ran(double M);
45 mgx_EXPORT long double ran(long double M);
49 mgx_EXPORT float ran(float M);
50 
54 template <typename T> double ran(T M) {
55  return ran(double(M));
56 }
57 
61 template <size_t dim, typename T> Vector<dim, T> ran(const Vector<dim, T>& V)
62 {
63  Vector<dim, T> result;
64  for(size_t i = 0; i < dim; ++i)
65  result[i] = ran(V[i]);
66  return result;
67 }
68 
75 mgx_EXPORT double gaussRan(double mean, double sigma);
76 
85 template <size_t dim> Vector<dim, double> gaussRan(const Vector<dim, double>& mean, const Vector<dim, double>& sigma)
86 {
87  Vector<dim, double> result;
88  for(size_t i = 0; i < dim; ++i)
89  result[i] = gaussRan(mean[i], sigma[i]);
90  return result;
91 }
92 
96 mgx_EXPORT long int ranInt();
97 
101 template <typename T> T ranInt()
102 {
103  long int i = ranInt();
104  return (T)i;
105 }
106 
110 template <size_t dim, typename T> Vector<dim, T> ranInt()
111 {
112  Vector<dim, long int> result;
113  for(size_t i = 0; i < dim; ++i)
114  result[i] = ranInt<T>();
115  return result;
116 }
117 
121 template <size_t dim> Vector<dim, long int> ranInt() {
122  return ranInt<dim, long int>();
123 }
124 
128 mgx_EXPORT long int ranInt(long int n);
129 
134 template <size_t dim, typename T> Vector<dim, T> ranInt(const Vector<dim, T>& n)
135 {
136  Vector<dim, T> result;
137  for(size_t i = 0; i < dim; ++i)
138  result[i] = ranInt<T>(n[i]);
139  return result;
140 }
141 } // namespace util
142 } // namespace mgx
143 #endif
Defines the Vector class template This file is shared by cuda, do not include headers that nvcc can't...