MuseScore  3.4
Music composition and notation
rngen.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003-2008 Fons Adriaensen <fons@kokkinizita.net>
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 
19 
20 #ifndef __RNGEN_H
21 #define __RNGEN_H
22 
23 
24 #include "prbsgen.h"
25 
26 
27 class Rngen
28 {
29 public:
30 
31  Rngen (void);
32 
33  void init (uint32_t seed);
34 
35  uint32_t irand (void)
36  {
37  uint32_t r;
38 
39  if (++_i == 55) _i = 0;
40  if (_i < 24) r = _a [_i] += _a [_i + 31];
41  else r = _a [_i] += _a [_i - 24];
42  return r;
43  }
44 
45  double urand (void) { return irand () / _p32; }
46  double grand (void);
47  void grand (double *x, double *y);
48  float urandf (void) { return irand () / _p32f; }
49  float grandf (void);
50  void grandf (float *x, float *y);
51 
52  ~Rngen (void);
53  Rngen (const Rngen&); // disabled, not to be used
54  Rngen& operator=(const Rngen&); // disabled, not to be used
55 
56 private:
57 
58  uint32_t _a [55];
59  int _i;
60  bool _md;
61  bool _mf;
62  double _vd;
63  float _vf;
64 
65  static const double _p31;
66  static const double _p32;
67  static const float _p31f;
68  static const float _p32f;
69 };
70 
71 
72 #endif
double _vd
Definition: rngen.h:62
double grand(void)
Definition: rngen.cpp:65
float urandf(void)
Definition: rngen.h:48
static const float _p31f
Definition: rngen.h:67
int _i
Definition: rngen.h:59
void init(uint32_t seed)
Definition: rngen.cpp:41
bool _mf
Definition: rngen.h:61
static const double _p32
Definition: rngen.h:66
Rngen & operator=(const Rngen &)
uint32_t irand(void)
Definition: rngen.h:35
float _vf
Definition: rngen.h:63
double urand(void)
Definition: rngen.h:45
uint32_t _a[55]
Definition: rngen.h:58
Definition: rngen.h:27
Rngen(void)
Definition: rngen.cpp:30
float grandf(void)
Definition: rngen.cpp:109
static const float _p32f
Definition: rngen.h:68
static const double _p31
Definition: rngen.h:65
~Rngen(void)
Definition: rngen.cpp:36
bool _md
Definition: rngen.h:60