\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL - Geometric Object Generators
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
CGAL::Random Class Reference

#include <CGAL/Random.h>

Definition

The class Random is a random numbers generator.

It generates uniformly distributed random bool, int and double. It can be used as the random number generating function object in the STL algorithm std::random_shuffle.

Instances of Random can be seen as input streams. Different streams are independent of each other, i.e. the sequence of numbers from one stream does not depend upon how many numbers were extracted from the other streams. At each time, an instance has a state that uniquely determines the subsequent numbers being produced.

It can be very useful, e.g. for debugging, to reproduce a sequence of random numbers. This can be done by either initialising with a fixed seed, or by using the state functions as described below.

Note
A Random object is not deterministic when used by several threads at the same time, even if a fixed seed has been chosen.

Implementation

We use the boost random library function boost::rand48 to generate the random numbers.

See Also
CGAL::get_default_random
Examples:
Generator/random_polygon.cpp.

Types

typedef unspecified_type State
 The State type.
 

Creation

 Random ()
 Default constructor. More...
 
 Random (unsigned int seed)
 Constructor initializing its internal state using seed. More...
 

Operations

bool get_bool ()
 returns a random bool.
 
template<int b>
int get_bits ()
 returns a random int value from the interval \([0,2^b)\). More...
 
int get_int (int lower, int upper)
 returns a random int from the interval [lower,upper).
 
double get_double (double lower=0.0, double upper=1.0)
 returns a random double from the interval [lower,upper).
 

Distributions

The following member functions are a 1-to-1 correspondence to some distributions from the boost random library.

template<typename IntType >
IntType uniform_smallint (IntType lower=0, IntType upper=9)
 returns a random IntType from the interval [lower,upper). More...
 
template<typename IntType >
IntType uniform_int (IntType lower=0, IntType upper=9)
 returns a random IntType from the interval [lower,upper). More...
 
template<typename RealType >
Realtype uniform_real (RealType lower=0.0, RealType upper=1.0)
 returns a random RealType from the interval [lower,upper). More...
 
template<typename RealType >
RealType uniform_01 ()
 returns a random RealType from the interval [0,1). More...
 
template<typename IntType >
IntType operator() (IntType upper)
 returns randomuniform_int<IntType>( 0, upper-1).
 

Seed and State Functions

unsigned int get_seed () const
 returns the seed used for initialization.
 
void save_state (State &state) const
 saves the current internal state in state.
 
void restore_state (State const &state)
 restores the internal state from state.
 

Equality Test

bool operator== (Random const &random2) const
 returns true, iff the random object and random2 have equal internal states.
 

Constructor & Destructor Documentation

CGAL::Random::Random ( )

Default constructor.

The seed is chosen based on the system time.

CGAL::Random::Random ( unsigned int  seed)

Constructor initializing its internal state using seed.

Equal values for seed result in equal sequences of random numbers.

Member Function Documentation

template<int b>
int CGAL::Random::get_bits ( )

returns a random int value from the interval \([0,2^b)\).

This is supposed to be efficient.

template<typename RealType >
RealType CGAL::Random::uniform_01 ( )

returns a random RealType from the interval [0,1).

RealType can be float, double, etc.

template<typename IntType >
IntType CGAL::Random::uniform_int ( IntType  lower = 0,
IntType  upper = 9 
)

returns a random IntType from the interval [lower,upper).

IntType can be an integral type as int, std::ptrdiff_t, std::size_t,etc.

Warning
In contrast to get_int this function may return upper.
template<typename RealType >
Realtype CGAL::Random::uniform_real ( RealType  lower = 0.0,
RealType  upper = 1.0 
)

returns a random RealType from the interval [lower,upper).

RealType can be float, double, etc.

template<typename IntType >
IntType CGAL::Random::uniform_smallint ( IntType  lower = 0,
IntType  upper = 9 
)

returns a random IntType from the interval [lower,upper).

IntType can be an integral type as int, std::ptrdiff_t, std::size_t,etc.

Warning
In contrast to get_int this function may return upper.