Skip to content

Commit 76c9ad1

Browse files
authored
Merge pull request #125 from weynaa/fix_rng_generator
Use standard library functions for random number generator
2 parents 17b61e8 + 70a52b0 commit 76c9ad1

File tree

1 file changed

+8
-32
lines changed

1 file changed

+8
-32
lines changed

src/lib/geogram/basic/numeric.cpp

+8-32
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,17 @@
4040
#include <geogram/basic/numeric.h>
4141
#include <stdlib.h>
4242

43+
#include <random>
44+
4345
#ifdef GEO_COMPILER_EMSCRIPTEN
4446
#pragma GCC diagnostic ignored "-Wc++11-long-long"
4547
#endif
4648

4749
namespace GEO {
4850

4951
namespace Numeric {
52+
53+
static std::mt19937_64 random_engine;
5054

5155
bool is_nan(float32 x) {
5256
#ifdef GEO_COMPILER_MSVC
@@ -65,47 +69,19 @@ namespace GEO {
6569
}
6670

6771
void random_reset() {
68-
#ifdef GEO_OS_WINDOWS
69-
srand(1);
70-
#else
71-
srandom(1);
72-
#endif
72+
random_engine = {};
7373
}
7474

7575
int32 random_int32() {
76-
#ifdef GEO_OS_WINDOWS
77-
return rand();
78-
#else
79-
return int32(random() % std::numeric_limits<int32>::max());
80-
#endif
76+
return std::uniform_int_distribution<int32>(0, RAND_MAX)(random_engine);
8177
}
8278

8379
float32 random_float32() {
84-
#if defined(GEO_OS_WINDOWS)
85-
return float(rand()) / float(RAND_MAX);
86-
#elif defined(GEO_OS_ANDROID)
87-
// TODO: find a way to call drand48()
88-
// (problem at link time)
89-
return
90-
float(random_int32()) /
91-
float(std::numeric_limits<int32>::max());
92-
#else
93-
return float(drand48());
94-
#endif
80+
return std::uniform_real_distribution<float32>(0, 1)(random_engine);
9581
}
9682

9783
float64 random_float64() {
98-
#if defined(GEO_OS_WINDOWS)
99-
return double(rand()) / double(RAND_MAX);
100-
#elif defined(GEO_OS_ANDROID)
101-
// TODO: find a way to call drand48()
102-
// (problem at link time)
103-
return
104-
double(random_int32()) /
105-
double(std::numeric_limits<int32>::max());
106-
#else
107-
return double(drand48());
108-
#endif
84+
return std::uniform_real_distribution<float64>(0, 1)(random_engine);
10985
}
11086
}
11187
}

0 commit comments

Comments
 (0)