spot  0.9.2
random.hh
Go to the documentation of this file.
1 // Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
2 // département Systèmes Répartis Coopératifs (SRC), Université Pierre
3 // et Marie Curie.
4 //
5 // This file is part of Spot, a model checking library.
6 //
7 // Spot is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2 of the License, or
10 // (at your option) any later version.
11 //
12 // Spot is distributed in the hope that it will be useful, but WITHOUT
13 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 // License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with Spot; see the file COPYING. If not, write to the Free
19 // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 // 02111-1307, USA.
21 
22 #ifndef SPOT_MISC_RANDOM_HH
23 # define SPOT_MISC_RANDOM_HH
24 
25 # include <cmath>
26 
27 namespace spot
28 {
32 
36  void srand(unsigned int seed);
37 
42  int rrand(int min, int max);
43 
48  int mrand(int max);
49 
54  double drand();
55 
62  double nrand();
63 
69  double bmrand();
70 
82  template<double (*gen)()>
83  class barand
84  {
85  public:
86  barand(int n, double p)
87  : n_(n), m_(n * p), s_(sqrt(n * p * (1 - p)))
88  {
89  }
90 
91  int
92  rand() const
93  {
94  int res;
95 
96  for (;;)
97  {
98  double x = gen() * s_ + m_;
99  if (x < 0.0)
100  continue;
101  res = static_cast<int> (x);
102  if (res <= n_)
103  break;
104  }
105  return res;
106  }
107  protected:
108  const int n_;
109  const double m_;
110  const double s_;
111  };
112 
117  int prand(double p);
119 }
120 
121 #endif // SPOT_MISC_RANDOM_HH

Please comment this page and report errors about it on the RefDocComments page.
Generated on Mon Jul 2 2012 17:35:47 for spot by doxygen 1.8.1.1