~ubuntu-branches/ubuntu/intrepid/aeolus/intrepid

« back to all changes in this revision

Viewing changes to rngen.h

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2007-05-14 22:18:54 UTC
  • Revision ID: james.westby@ubuntu.com-20070514221854-274rj6fqs5tegu7q
Tags: upstream-0.6.6+2
ImportĀ upstreamĀ versionĀ 0.6.6+2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    Copyright (C) 2003 Fons Adriaensen <fons.adriaensen@skynet.be>
 
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 "itypes.h"
 
25
 
 
26
 
 
27
class Rngen
 
28
{
 
29
public:
 
30
 
 
31
  Rngen (void);
 
32
 
 
33
  void init (U32 s);
 
34
 
 
35
  U32 irand (void)
 
36
  {
 
37
    U32 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
  U32     _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