1 /* boost random/triangle_distribution.hpp header file
3 * Copyright Jens Maurer 2000-2001
4 * Distributed under the Boost Software License, Version 1.0. (See
5 * accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
8 * See http://www.boost.org for most recent version including documentation.
13 * 2001-02-18 moved to individual header files
16 #ifndef BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
17 #define BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP
19 #include <boost/config/no_tr1/cmath.hpp>
21 #include <boost/random/detail/config.hpp>
22 #include <boost/random/uniform_01.hpp>
26 // triangle distribution, with a smallest, b most probable, and c largest
28 template<class RealType
= double>
29 class triangle_distribution
32 typedef RealType input_type
;
33 typedef RealType result_type
;
35 explicit triangle_distribution(result_type a_arg
= result_type(0),
36 result_type b_arg
= result_type(0.5),
37 result_type c_arg
= result_type(1))
38 : _a(a_arg
), _b(b_arg
), _c(c_arg
)
40 assert(_a
<= _b
&& _b
<= _c
);
44 // compiler-generated copy ctor and assignment operator are fine
45 result_type
a() const { return _a
; }
46 result_type
b() const { return _b
; }
47 result_type
c() const { return _c
; }
51 template<class Engine
>
52 result_type
operator()(Engine
& eng
)
54 #ifndef BOOST_NO_STDC_NAMESPACE
57 result_type u
= eng();
59 return _a
+ p1
*sqrt(u
);
61 return _c
- d3
*sqrt(d2
*u
-d1
);
64 #ifndef BOOST_RANDOM_NO_STREAM_OPERATORS
65 template<class CharT
, class Traits
>
66 friend std::basic_ostream
<CharT
,Traits
>&
67 operator<<(std::basic_ostream
<CharT
,Traits
>& os
, const triangle_distribution
& td
)
69 os
<< td
._a
<< " " << td
._b
<< " " << td
._c
;
73 template<class CharT
, class Traits
>
74 friend std::basic_istream
<CharT
,Traits
>&
75 operator>>(std::basic_istream
<CharT
,Traits
>& is
, triangle_distribution
& td
)
77 is
>> std::ws
>> td
._a
>> std::ws
>> td
._b
>> std::ws
>> td
._c
;
86 #ifndef BOOST_NO_STDC_NAMESPACE
96 result_type _a
, _b
, _c
;
97 result_type d1
, d2
, d3
, q1
, p1
;
102 #endif // BOOST_RANDOM_TRIANGLE_DISTRIBUTION_HPP