Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Class template uniform_smallint

boost::random::uniform_smallint

Synopsis

// In header: <boost/random/uniform_smallint.hpp>

template<typename IntType = int> 
class uniform_smallint {
public:
  // types
  typedef IntType ; 
  typedef IntType ;

  // member classes/structs/unions

  class param_type {
  public:
    // types
    typedef uniform_smallint ;

    // construct/copy/destruct
    (IntType = , IntType = );

    // public member functions
    IntType () ;
    IntType () ;

    // friend functions
    template<typename CharT, typename Traits> 
      CharT, Traits > & 
      (CharT, Traits > &, const param_type &);
    template<typename CharT, typename Traits> 
      CharT, Traits > & 
      (CharT, Traits > &, const param_type &);
    bool (const param_type &, const param_type &);
    bool (const param_type &, const param_type &);
  };

  // construct/copy/destruct
  (IntType = , IntType = );
  (const param_type &);

  // public member functions
  result_type () ;
  result_type () ;
  result_type () ;
  result_type () ;
  param_type () ;
  void (const param_type &);
  void ();
  template<typename Engine> result_type (Engine &) ;
  template<typename Engine> 
    result_type (Engine &, const param_type &) ;

  // friend functions
  template<typename CharT, typename Traits> 
    CharT, Traits > & 
    (CharT, Traits > &, 
               const uniform_smallint &);
  template<typename CharT, typename Traits> 
    CharT, Traits > & 
    (CharT, Traits > &, 
               const uniform_smallint &);
  bool (const uniform_smallint &, const uniform_smallint &);
  bool (const uniform_smallint &, const uniform_smallint &);
};

Description

The distribution function uniform_smallint models a random distribution . On each invocation, it returns a random integer value uniformly distributed in the set of integer numbers {min, min+1, min+2, ..., max}. It assumes that the desired range (max-min+1) is small compared to the range of the underlying source of random numbers and thus makes no attempt to limit quantization errors.

Let the desired range of integer numbers, and let be the range of the underlying source of random numbers. Then, for the uniform distribution, the theoretical probability for any number i in the range will be . Likewise, assume a uniform distribution on for the underlying source of random numbers, i.e. . Let denote the random distribution generated by uniform_smallint. Then the sum over all i in of shall not exceed .

The template parameter IntType shall denote an integer-like value type.

[Note] Note

The property above is the square sum of the relative differences in probabilities between the desired uniform distribution and the generated distribution . The property can be fulfilled with the calculation , as follows: Let . The base distribution on is folded onto the range . The numbers i < r have assigned numbers of the base distribution, the rest has only . Therefore, for i < r and otherwise. Substituting this in the above sum formula leads to the desired result.

Note: The upper bound for is . Regarding the upper bound for the square sum of the relative quantization error of , it seems wise to either choose so that or ensure that is divisible by .

uniform_smallint public construct/copy/destruct

  1. (IntType min = , IntType max = );

    Constructs a uniform_smallint. min and max are the lower and upper bounds of the output range, respectively.

  2. (const param_type & param);

    Constructs a uniform_smallint from its parameters.

uniform_smallint public member functions

  1. result_type () ;

    Returns the minimum value of the distribution.

  2. result_type () ;

    Returns the maximum value of the distribution.

  3. result_type () ;

    Returns the minimum value of the distribution.

  4. result_type () ;

    Returns the maximum value of the distribution.

  5. param_type () ;

    Returns the parameters of the distribution.

  6. void (const param_type & param);

    Sets the parameters of the distribution.

  7. void ();

    Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset.

  8. template<typename Engine> result_type (Engine & eng) ;

    Returns a value uniformly distributed in the range [min(), max()].

  9. template<typename Engine> 
      result_type (Engine & eng, const param_type & param) ;

    Returns a value uniformly distributed in the range [param.a(), param.b()].

uniform_smallint friend functions

  1. template<typename CharT, typename Traits> 
      CharT, Traits > & 
      (CharT, Traits > & os, 
                 const uniform_smallint & ud);

    Writes the distribution to a std::ostream.

  2. template<typename CharT, typename Traits> 
      CharT, Traits > & 
      (CharT, Traits > & is, 
                 const uniform_smallint & ud);

    Reads the distribution from a std::istream.

  3. bool (const uniform_smallint & lhs, const uniform_smallint & rhs);

    Returns true if the two distributions will produce identical sequences of values given equal generators.

  4. bool (const uniform_smallint & lhs, const uniform_smallint & rhs);

    Returns true if the two distributions may produce different sequences of values given equal generators.


PrevUpHomeNext