Started to merge @ZobyTwo cmake branch
This commit is contained in:
118
thirdparty/Boost/boost/random/triangle_distribution.hpp
vendored
Normal file
118
thirdparty/Boost/boost/random/triangle_distribution.hpp
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
/* boost random/triangle_distribution.hpp header file
|
||||
*
|
||||
* Copyright Jens Maurer 2000-2001
|
||||
* Distributed under the Boost Software License, Version 1.0. (See
|
||||
* accompanying file LICENSE_1_0.txt or copy at
|
||||
* http://www.boost.org/LICENSE_1_0.txt)
|
||||
*
|
||||
* See http://www.boost.org for most recent version including documentation.
|
||||
*
|
||||
* $Id: triangle_distribution.hpp 60755 2010-03-22 00:45:06Z steven_watanabe $
|
||||
*
|
||||
* Revision history
|
||||
* 2001-02-18 moved to individual header files
|
||||
*/
|
||||
|
||||
#ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
|
||||
#define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
|
||||
|
||||
#include <boost/config/no_tr1/cmath.hpp>
|
||||
#include <cassert>
|
||||
#include <boost/random/detail/config.hpp>
|
||||
#include <boost/random/uniform_01.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
/**
|
||||
* Instantiations of @c triangle_distribution model a \random_distribution.
|
||||
* A @c triangle_distribution has three parameters, @c a, @c b, and @c c,
|
||||
* which are the smallest, the most probable and the largest values of
|
||||
* the distribution respectively.
|
||||
*/
|
||||
template<class RealType = double>
|
||||
class triangle_distribution
|
||||
{
|
||||
public:
|
||||
typedef RealType input_type;
|
||||
typedef RealType result_type;
|
||||
|
||||
/**
|
||||
* Constructs a @c triangle_distribution with the parameters
|
||||
* @c a, @c b, and @c c.
|
||||
*
|
||||
* Preconditions: a <= b <= c.
|
||||
*/
|
||||
explicit triangle_distribution(result_type a_arg = result_type(0),
|
||||
result_type b_arg = result_type(0.5),
|
||||
result_type c_arg = result_type(1))
|
||||
: _a(a_arg), _b(b_arg), _c(c_arg)
|
||||
{
|
||||
assert(_a <= _b && _b <= _c);
|
||||
init();
|
||||
}
|
||||
|
||||
// compiler-generated copy ctor and assignment operator are fine
|
||||
|
||||
/** Returns the @c a parameter of the distribution */
|
||||
result_type a() const { return _a; }
|
||||
/** Returns the @c b parameter of the distribution */
|
||||
result_type b() const { return _b; }
|
||||
/** Returns the @c c parameter of the distribution */
|
||||
result_type c() const { return _c; }
|
||||
|
||||
void reset() { }
|
||||
|
||||
template<class Engine>
|
||||
result_type operator()(Engine& eng)
|
||||
{
|
||||
#ifndef BOOST_NO_STDC_NAMESPACE
|
||||
using std::sqrt;
|
||||
#endif
|
||||
result_type u = eng();
|
||||
if( u <= q1 )
|
||||
return _a + p1*sqrt(u);
|
||||
else
|
||||
return _c - d3*sqrt(d2*u-d1);
|
||||
}
|
||||
|
||||
#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS
|
||||
template<class CharT, class Traits>
|
||||
friend std::basic_ostream<CharT,Traits>&
|
||||
operator<<(std::basic_ostream<CharT,Traits>& os, const triangle_distribution& td)
|
||||
{
|
||||
os << td._a << " " << td._b << " " << td._c;
|
||||
return os;
|
||||
}
|
||||
|
||||
template<class CharT, class Traits>
|
||||
friend std::basic_istream<CharT,Traits>&
|
||||
operator>>(std::basic_istream<CharT,Traits>& is, triangle_distribution& td)
|
||||
{
|
||||
is >> std::ws >> td._a >> std::ws >> td._b >> std::ws >> td._c;
|
||||
td.init();
|
||||
return is;
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
/// \cond hide_private_members
|
||||
void init()
|
||||
{
|
||||
#ifndef BOOST_NO_STDC_NAMESPACE
|
||||
using std::sqrt;
|
||||
#endif
|
||||
d1 = _b - _a;
|
||||
d2 = _c - _a;
|
||||
d3 = sqrt(_c - _b);
|
||||
q1 = d1 / d2;
|
||||
p1 = sqrt(d1 * d2);
|
||||
}
|
||||
/// \endcond
|
||||
|
||||
result_type _a, _b, _c;
|
||||
result_type d1, d2, d3, q1, p1;
|
||||
};
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
|
||||
Reference in New Issue
Block a user