CRandom.h
//-----------------------------------------------------------------------------
// $Header: /tmp_mnt/asis/offline/ceres/cool/project/RCS/CRandom.h,v 2.1 1996/10/04 08:45:38 voigt Exp $
//
// COOL Program Library
// Copyright (C) CERES collaboration, 1996
//
// Declaration of class CRandom
//
//-----------------------------------------------------------------------------
#ifndef CRANDOM_H
#define CRANDOM_H
#include "cool.h"
#include <stdlib.h>
#include <math.h>
class CRandom {
public:
CRandom();
CRandom(long);
~CRandom();
inline void setSeed(long);
inline double flat(); // range [0,1[
inline double flat(double a); // range [0,a[
inline double flat(double a, double b); // range [a,b[
inline long intFlat(long n); // range [0,n[
inline long intFlat(long n, long m); // range [n,m[
inline double exponential(); // mean 1
inline double exponential(double a); // mean a
double gauss(); // mean 0, sigma 1
inline double gauss(double m, double s); // mean m, sigma s
long poisson(double m); // mean m
private:
double nextGauss;
CBoolean nextGaussPresent;
};
void CRandom::setSeed(long seed) { srand48(seed); }
double CRandom::flat() { return drand48(); }
double CRandom::flat(double a) { return a*flat(); }
double CRandom::flat(double a, double b) { return (b-a)*flat()+a; }
long CRandom::intFlat(long n) { return long(flat()*double(n)); }
long CRandom::intFlat(long n, long m) { return n + intFlat(m-n); }
double CRandom::exponential() { return -log(flat()); }
double CRandom::exponential(double mean) { return -log(flat())*mean; }
double CRandom::gauss(double m, double s) { return gauss()*s + m; }
#endif /* CRANDOM_H */