mirror of
https://github.com/boostorg/random.git
synced 2026-01-19 04:22:17 +00:00
145 lines
5.0 KiB
HTML
145 lines
5.0 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
|
|
<title>Boost Random Number Library Variate Generator</title>
|
|
</head>
|
|
|
|
<body bgcolor="#FFFFFF" text="#000000">
|
|
|
|
<h1>Boost Random Number Library Variate Generator</h1>
|
|
|
|
A random variate generator is used to join a random number generator
|
|
together with a random number distribution.
|
|
Boost.Random provides a vast choice of
|
|
<a href="random-generators.html">generators</a>
|
|
as well as
|
|
<a href="random-distributions.html">distributions</a>
|
|
.
|
|
|
|
|
|
<h2><a name="variate_generator">Class template <code>variate_generator</code></h2>
|
|
|
|
<h3>Synopsis</h3>
|
|
<pre>
|
|
#include <<a href="../../boost/random/variate_generator.hpp">boost/random/variate_generator.hpp</a>>
|
|
|
|
template<class Engine, class Distribution>
|
|
class variate_generator
|
|
{
|
|
public:
|
|
typedef Engine engine_type;
|
|
typedef Distribution distribution_type;
|
|
typedef typename Distribution::result_type result_type;
|
|
|
|
variate_generator(Engine e, Distribution d);
|
|
|
|
result_type operator()();
|
|
template<class T>
|
|
result_type operator()(T value);
|
|
|
|
engine_value_type& engine();
|
|
const engine_value_type& engine() const;
|
|
|
|
result_type min() const;
|
|
result_type max() const;
|
|
};
|
|
</pre>
|
|
|
|
<h3>Description</h3>
|
|
|
|
Instantations of class template <code>variate_generator</code> model a
|
|
<a href="random-concepts.html#number_generator">number generator</a>.
|
|
<p>
|
|
The argument for the template parameter <code>Engine</code> shall be
|
|
of the form U, U&, or U*, where U models a uniform random number
|
|
generator. Then, the member <code>engine_value_type</code> names U
|
|
(not the pointer or reference to U).
|
|
<p>
|
|
|
|
Specializations of <code>variate_generator</code> satisfy the
|
|
requirements of CopyConstructible. They also satisfy the requirements
|
|
of Assignable unless the template parameter Engine is of the form U&.
|
|
<p>
|
|
|
|
The complexity of all functions specified in this section is
|
|
constant. No function described in this section except the constructor
|
|
throws an exception.
|
|
|
|
<pre> variate_generator(engine_type eng, distribution_type d)</pre>
|
|
<strong>Effects:</strong> Constructs a <code>variate_generator</code>
|
|
object with the associated uniform random number generator
|
|
<code>eng</code> and the associated random distribution
|
|
<code>d</code>.
|
|
<br>
|
|
<strong>Throws:</strong> If and what the copy constructor of Engine or
|
|
Distribution throws.
|
|
|
|
<pre> result_type operator()()</pre>
|
|
<strong>Returns:</strong> <code>distribution()(e)</code>
|
|
<br>
|
|
<strong>Notes:</strong> The sequence of numbers produced by the
|
|
uniform random number generator <code>e</code>, s<sub>e</sub>, is
|
|
obtained from the sequence of numbers produced by the associated
|
|
uniform random number generator <code>eng</code>, s<sub>eng</sub>, as
|
|
follows: Consider the values of
|
|
<code>numeric_limits<<em>T</em>>::is_integer</code> for
|
|
<code><em>T</em></code> both <code>Distribution::input_type</code> and
|
|
<code>engine_value_type::result_type</code>. If the values for both
|
|
types are <code>true</code>, then s<sub>e</sub> is identical to
|
|
s<sub>eng</sub>. Otherwise, if the values for both types are
|
|
<code>false</code>, then the numbers in s<sub>eng</sub> are divided by
|
|
<code>engine().max()-engine().min()</code> to obtain the
|
|
numbers in s<sub>e</sub>. Otherwise, if the value for
|
|
<code>engine_value_type::result_type</code> is <code>true</code> and
|
|
the value for <code>Distribution::input_type</code> is
|
|
<code>false</code>, then the numbers in s<sub>eng</sub> are divided by
|
|
<code>engine().max()-engine().min()+1</code> to obtain the
|
|
numbers in s<sub>e</sub>. Otherwise, the mapping from s<sub>eng</sub>
|
|
to s<sub>e</sub> is implementation-defined. In all cases, an implicit
|
|
conversion from <code>engine_value_type::result_type</code> to
|
|
<code>Distribution::input_type</code> is performed. If such a
|
|
conversion does not exist, the program is ill-formed.
|
|
|
|
<pre> template<class T> result_type operator()(T value)</pre>
|
|
<strong>Returns:</strong> <code>distribution()(e, value)</code>. For
|
|
the semantics of <code>e</code>, see the description of
|
|
<code>operator()()</code>.
|
|
|
|
<pre> engine_value_type& engine()</pre>
|
|
<strong>Returns:</strong> A reference to the associated uniform random
|
|
number generator.
|
|
|
|
<pre> const engine_value_type& engine() const</pre>
|
|
<strong>Returns:</strong> A reference to the associated uniform random
|
|
number generator.
|
|
|
|
<pre> distribution_type& distribution()</pre>
|
|
<strong>Returns:</strong> A reference to the associated random
|
|
distribution.
|
|
|
|
<pre> const distribution_type& distribution() const</pre>
|
|
<strong>Returns:</strong> A reference to the associated random
|
|
distribution.
|
|
|
|
<pre> result_type min() const</pre>
|
|
<strong>Precondition:</strong> <code>distribution().min()</code> is
|
|
well-formed
|
|
<br>
|
|
<strong>Returns:</strong> <code>distribution().min()</code>
|
|
|
|
<pre> result_type max() const</pre>
|
|
<strong>Precondition:</strong> <code>distribution().max()</code> is
|
|
well-formed
|
|
<br>
|
|
<strong>Returns:</strong> <code>distribution().max()</code>
|
|
|
|
<p>
|
|
<hr>
|
|
<a href="../../people/jens_maurer.htm">Jens Maurer</a>,
|
|
2003-10-25
|
|
|
|
</body>
|
|
</html>
|