SpectMorph
smrandom.hh
1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
2 
3 #ifndef SPECTMORPH_RANDOM_HH
4 #define SPECTMORPH_RANDOM_HH
5 
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <rapicorn.hh>
9 
10 namespace SpectMorph
11 {
12 
13 class Random
14 {
15  Rapicorn::Pcg32Rng rand_gen;
16 public:
17  Random();
18 
19  void set_seed (uint32_t seed);
20 
21  inline double
22  random_double_range (double begin, double end)
23  {
24  const uint32_t rand_max = 0xffffffff; // Pcg32Rng output: complete 32-bit values
25  const uint32_t r = random_uint32();
26  const double scale = 1.0 / (double (rand_max) + 1.0);
27 
28  return r * scale * (end - begin) + begin;
29  }
30  inline uint32_t
31  random_uint32()
32  {
33  return rand_gen.random();
34  }
35  inline void
36  random_block (size_t n_values, uint32_t *values)
37  {
38  while (n_values--)
39  *values++ = random_uint32();
40  }
41 };
42 
43 }
44 #endif
Definition: smrandom.hh:13
Definition: smaudio.hh:15