36 namespace std _GLIBCXX_VISIBILITY(default)
38 _GLIBCXX_BEGIN_NAMESPACE_VERSION
55 template<
typename _RealType,
size_t __bits,
56 typename _UniformRandomNumberGenerator>
60 _GLIBCXX_END_NAMESPACE_VERSION
67 _GLIBCXX_BEGIN_NAMESPACE_VERSION
69 template<
typename _UIntType,
size_t __w,
70 bool = __w < static_cast<size_t>
73 {
static const _UIntType __value = 0; };
75 template<
typename _UIntType,
size_t __w>
76 struct _Shift<_UIntType, __w, true>
77 {
static const _UIntType __value = _UIntType(1) << __w; };
80 int __which = ((__s <= __CHAR_BIT__ *
sizeof (int))
81 + (__s <= __CHAR_BIT__ *
sizeof (long))
82 + (__s <= __CHAR_BIT__ *
sizeof (
long long))
85 struct _Select_uint_least_t
87 static_assert(__which < 0,
88 "sorry, would be too much trouble for a slow result");
92 struct _Select_uint_least_t<__s, 4>
93 {
typedef unsigned int type; };
96 struct _Select_uint_least_t<__s, 3>
97 {
typedef unsigned long type; };
100 struct _Select_uint_least_t<__s, 2>
101 {
typedef unsigned long long type; };
103 #ifdef _GLIBCXX_USE_INT128
105 struct _Select_uint_least_t<__s, 1>
106 {
typedef unsigned __int128 type; };
110 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c,
111 bool __big_enough = (!(__m & (__m - 1))
112 || (_Tp(-1) - __c) / __a >= __m - 1),
113 bool __schrage_ok = __m % __a < __m / __a>
116 typedef typename _Select_uint_least_t<
std::__lg(__a)
120 {
return static_cast<_Tp
>((_Tp2(__a) * __x + __c) % __m); }
124 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c>
125 struct _Mod<_Tp, __m, __a, __c, false, true>
134 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c,
bool __s>
135 struct _Mod<_Tp, __m, __a, __c, true, __s>
140 _Tp __res = __a * __x + __c;
147 template<
typename _Tp, _Tp __m, _Tp __a = 1, _Tp __c = 0>
150 {
return _Mod<_Tp, __m, __a, __c>::__calc(__x); }
153 template<
typename _Tp>
157 return ((__x - 1) & __x) == 0;
164 template<
typename _Engine,
typename _DInputType>
169 _Adaptor(_Engine& __g)
174 {
return _DInputType(0); }
178 {
return _DInputType(1); }
197 _GLIBCXX_END_NAMESPACE_VERSION
200 _GLIBCXX_BEGIN_NAMESPACE_VERSION
240 template<
typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
243 static_assert(std::is_unsigned<_UIntType>::value,
"template argument "
244 "substituting _UIntType not an unsigned integral type");
245 static_assert(__m == 0u || (__a < __m && __c < __m),
246 "template argument substituting __m out of bounds");
277 template<
typename _Sseq,
typename =
typename
278 std::enable_if<!std::is_same<_Sseq, linear_congruential_engine>::value>
300 template<
typename _Sseq>
301 typename std::enable_if<std::is_class<_Sseq>::value>::type
312 {
return __c == 0u ? 1u : 0u; }
327 for (; __z != 0ULL; --__z)
337 _M_x = __detail::__mod<_UIntType, __m, __a, __c>(_M_x);
355 {
return __lhs._M_x == __rhs._M_x; }
365 template<
typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
366 _UIntType1 __m1,
typename _CharT,
typename _Traits>
368 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
370 __a1, __c1, __m1>& __lcr);
385 template<
typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
386 _UIntType1 __m1,
typename _CharT,
typename _Traits>
407 template<
typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
413 {
return !(__lhs == __rhs); }
444 template<
typename _UIntType,
size_t __w,
445 size_t __n,
size_t __m,
size_t __r,
446 _UIntType __a,
size_t __u, _UIntType __d,
size_t __s,
447 _UIntType __b,
size_t __t,
448 _UIntType __c,
size_t __l, _UIntType __f>
451 static_assert(std::is_unsigned<_UIntType>::value,
"template argument "
452 "substituting _UIntType not an unsigned integral type");
453 static_assert(1u <= __m && __m <= __n,
454 "template argument substituting __m out of bounds");
455 static_assert(__r <= __w,
"template argument substituting "
457 static_assert(__u <= __w,
"template argument substituting "
459 static_assert(__s <= __w,
"template argument substituting "
461 static_assert(__t <= __w,
"template argument substituting "
463 static_assert(__l <= __w,
"template argument substituting "
466 "template argument substituting __w out of bound");
467 static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1),
468 "template argument substituting __a out of bound");
469 static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1),
470 "template argument substituting __b out of bound");
471 static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1),
472 "template argument substituting __c out of bound");
473 static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1),
474 "template argument substituting __d out of bound");
475 static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1),
476 "template argument substituting __f out of bound");
483 static constexpr
size_t word_size = __w;
484 static constexpr
size_t state_size = __n;
485 static constexpr
size_t shift_size = __m;
486 static constexpr
size_t mask_bits = __r;
488 static constexpr
size_t tempering_u = __u;
490 static constexpr
size_t tempering_s = __s;
492 static constexpr
size_t tempering_t = __t;
494 static constexpr
size_t tempering_l = __l;
495 static constexpr
result_type initialization_multiplier = __f;
509 template<
typename _Sseq,
typename =
typename
510 std::enable_if<!std::is_same<_Sseq, mersenne_twister_engine>::value>
519 template<
typename _Sseq>
520 typename std::enable_if<std::is_class<_Sseq>::value>::type
535 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
541 discard(
unsigned long long __z);
561 {
return (
std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x)
562 && __lhs._M_p == __rhs._M_p); }
576 template<
typename _UIntType1,
577 size_t __w1,
size_t __n1,
578 size_t __m1,
size_t __r1,
579 _UIntType1 __a1,
size_t __u1,
580 _UIntType1 __d1,
size_t __s1,
581 _UIntType1 __b1,
size_t __t1,
582 _UIntType1 __c1,
size_t __l1, _UIntType1 __f1,
583 typename _CharT,
typename _Traits>
585 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
587 __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
602 template<
typename _UIntType1,
603 size_t __w1,
size_t __n1,
604 size_t __m1,
size_t __r1,
605 _UIntType1 __a1,
size_t __u1,
606 _UIntType1 __d1,
size_t __s1,
607 _UIntType1 __b1,
size_t __t1,
608 _UIntType1 __c1,
size_t __l1, _UIntType1 __f1,
609 typename _CharT,
typename _Traits>
613 __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
619 _UIntType _M_x[state_size];
635 template<
typename _UIntType,
size_t __w,
636 size_t __n,
size_t __m,
size_t __r,
637 _UIntType __a,
size_t __u, _UIntType __d,
size_t __s,
638 _UIntType __b,
size_t __t,
639 _UIntType __c,
size_t __l, _UIntType __f>
642 __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __lhs,
644 __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __rhs)
645 {
return !(__lhs == __rhs); }
667 template<
typename _UIntType,
size_t __w,
size_t __s,
size_t __r>
668 class subtract_with_carry_engine
670 static_assert(std::is_unsigned<_UIntType>::value,
"template argument "
671 "substituting _UIntType not an unsigned integral type");
672 static_assert(0u < __s && __s < __r,
673 "template argument substituting __s out of bounds");
675 "template argument substituting __w out of bounds");
679 typedef _UIntType result_type;
682 static constexpr
size_t word_size = __w;
683 static constexpr
size_t short_lag = __s;
684 static constexpr
size_t long_lag = __r;
685 static constexpr result_type default_seed = 19780503u;
692 subtract_with_carry_engine(result_type __sd = default_seed)
701 template<
typename _Sseq,
typename =
typename
702 std::enable_if<!std::is_same<_Sseq, subtract_with_carry_engine>::value>
705 subtract_with_carry_engine(_Sseq& __q)
721 seed(result_type __sd = default_seed);
727 template<
typename _Sseq>
728 typename std::enable_if<std::is_class<_Sseq>::value>::type
735 static constexpr result_type
743 static constexpr result_type
745 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
751 discard(
unsigned long long __z)
753 for (; __z != 0ULL; --__z)
776 operator==(
const subtract_with_carry_engine& __lhs,
777 const subtract_with_carry_engine& __rhs)
778 {
return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x)
779 && __lhs._M_carry == __rhs._M_carry
780 && __lhs._M_p == __rhs._M_p); }
794 template<
typename _UIntType1,
size_t __w1,
size_t __s1,
size_t __r1,
795 typename _CharT,
typename _Traits>
797 operator<<(std::basic_ostream<_CharT, _Traits>&,
798 const std::subtract_with_carry_engine<_UIntType1, __w1,
813 template<
typename _UIntType1,
size_t __w1,
size_t __s1,
size_t __r1,
814 typename _CharT,
typename _Traits>
817 std::subtract_with_carry_engine<_UIntType1, __w1,
821 _UIntType _M_x[long_lag];
838 template<
typename _UIntType,
size_t __w,
size_t __s,
size_t __r>
840 operator!=(
const std::subtract_with_carry_engine<_UIntType, __w,
842 const std::subtract_with_carry_engine<_UIntType, __w,
844 {
return !(__lhs == __rhs); }
853 template<
typename _RandomNumberEngine,
size_t __p,
size_t __r>
856 static_assert(1 <= __r && __r <= __p,
857 "template argument substituting __r out of bounds");
861 typedef typename _RandomNumberEngine::result_type
result_type;
864 static constexpr
size_t block_size = __p;
865 static constexpr
size_t used_block = __r;
873 : _M_b(), _M_n(0) { }
883 : _M_b(__rng), _M_n(0) { }
893 : _M_b(std::move(__rng)), _M_n(0) { }
903 : _M_b(__s), _M_n(0) { }
910 template<
typename _Sseq,
typename =
typename
911 std::enable_if<!std::is_same<_Sseq, discard_block_engine>::value
912 && !std::is_same<_Sseq, _RandomNumberEngine>::value>
946 template<
typename _Sseq>
958 const _RandomNumberEngine&
982 for (; __z != 0ULL; --__z)
1006 {
return __lhs._M_b == __rhs._M_b && __lhs._M_n == __rhs._M_n; }
1019 template<
typename _RandomNumberEngine1,
size_t __p1,
size_t __r1,
1020 typename _CharT,
typename _Traits>
1022 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
1037 template<
typename _RandomNumberEngine1,
size_t __p1,
size_t __r1,
1038 typename _CharT,
typename _Traits>
1045 _RandomNumberEngine _M_b;
1060 template<
typename _RandomNumberEngine,
size_t __p,
size_t __r>
1066 {
return !(__lhs == __rhs); }
1073 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType>
1076 static_assert(std::is_unsigned<_UIntType>::value,
"template argument "
1077 "substituting _UIntType not an unsigned integral type");
1079 "template argument substituting __w out of bounds");
1111 : _M_b(std::move(__rng)) { }
1128 template<
typename _Sseq,
typename =
typename
1129 std::enable_if<!std::is_same<_Sseq, independent_bits_engine>::value
1130 && !std::is_same<_Sseq, _RandomNumberEngine>::value>
1158 template<
typename _Sseq>
1167 const _RandomNumberEngine&
1183 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
1191 for (; __z != 0ULL; --__z)
1216 {
return __lhs._M_b == __rhs._M_b; }
1230 template<
typename _CharT,
typename _Traits>
1234 __w, _UIntType>& __x)
1241 _RandomNumberEngine _M_b;
1256 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType>
1262 {
return !(__lhs == __rhs); }
1274 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType,
1275 typename _CharT,
typename _Traits>
1277 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
1279 __w, _UIntType>& __x)
1291 template<
typename _RandomNumberEngine,
size_t __k>
1294 static_assert(1u <= __k,
"template argument substituting "
1295 "__k out of bound");
1299 typedef typename _RandomNumberEngine::result_type
result_type;
1301 static constexpr
size_t table_size = __k;
1310 { _M_initialize(); }
1321 { _M_initialize(); }
1331 : _M_b(std::move(__rng))
1332 { _M_initialize(); }
1343 { _M_initialize(); }
1350 template<
typename _Sseq,
typename =
typename
1351 std::enable_if<!std::is_same<_Sseq, shuffle_order_engine>::value
1352 && !std::is_same<_Sseq, _RandomNumberEngine>::value>
1357 { _M_initialize(); }
1386 template<
typename _Sseq>
1397 const _RandomNumberEngine&
1421 for (; __z != 0ULL; --__z)
1445 {
return (__lhs._M_b == __rhs._M_b
1446 &&
std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v)
1447 && __lhs._M_y == __rhs._M_y); }
1460 template<
typename _RandomNumberEngine1,
size_t __k1,
1461 typename _CharT,
typename _Traits>
1463 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
1478 template<
typename _RandomNumberEngine1,
size_t __k1,
1479 typename _CharT,
typename _Traits>
1485 void _M_initialize()
1487 for (
size_t __i = 0; __i < __k; ++__i)
1492 _RandomNumberEngine _M_b;
1508 template<
typename _RandomNumberEngine,
size_t __k>
1514 {
return !(__lhs == __rhs); }
1520 typedef linear_congruential_engine<uint_fast32_t, 16807UL, 0UL, 2147483647UL>
1551 0xb5026f5aa96619e9ULL, 29,
1552 0x5555555555555555ULL, 17,
1553 0x71d67fffeda60000ULL, 37,
1554 0xfff7eee000000000ULL, 43,
1557 typedef subtract_with_carry_engine<uint_fast32_t, 24, 10, 24>
1560 typedef subtract_with_carry_engine<uint_fast64_t, 48, 5, 12>
1583 #ifdef _GLIBCXX_USE_RANDOM_TR1
1597 random_device(
const std::string& __token =
"mt19937")
1598 { _M_init_pretr1(__token); }
1613 entropy() const noexcept
1619 #ifdef _GLIBCXX_USE_RANDOM_TR1
1620 return this->_M_getval();
1622 return this->_M_getval_pretr1();
1627 random_device(
const random_device&) =
delete;
1628 void operator=(
const random_device&) =
delete;
1665 template<
typename _IntType =
int>
1669 "template argument not an integral type");
1682 : _M_a(__a), _M_b(__b)
1684 _GLIBCXX_DEBUG_ASSERT(_M_a <= _M_b);
1697 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
1711 : _M_param(__a, __b)
1729 {
return _M_param.a(); }
1733 {
return _M_param.b(); }
1740 {
return _M_param; }
1748 { _M_param = __param; }
1755 {
return this->a(); }
1762 {
return this->b(); }
1767 template<
typename _UniformRandomNumberGenerator>
1770 {
return this->
operator()(__urng, _M_param); }
1772 template<
typename _UniformRandomNumberGenerator>
1774 operator()(_UniformRandomNumberGenerator& __urng,
1775 const param_type& __p);
1777 template<
typename _ForwardIterator,
1778 typename _UniformRandomNumberGenerator>
1780 __generate(_ForwardIterator __f, _ForwardIterator __t,
1781 _UniformRandomNumberGenerator& __urng)
1782 { this->__generate(__f, __t, __urng, _M_param); }
1784 template<
typename _ForwardIterator,
1785 typename _UniformRandomNumberGenerator>
1787 __generate(_ForwardIterator __f, _ForwardIterator __t,
1788 _UniformRandomNumberGenerator& __urng,
1789 const param_type& __p)
1790 { this->__generate_impl(__f, __t, __urng, __p); }
1792 template<
typename _UniformRandomNumberGenerator>
1795 _UniformRandomNumberGenerator& __urng,
1796 const param_type& __p)
1797 { this->__generate_impl(__f, __t, __urng, __p); }
1806 {
return __d1._M_param == __d2._M_param; }
1809 template<
typename _ForwardIterator,
1810 typename _UniformRandomNumberGenerator>
1812 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
1813 _UniformRandomNumberGenerator& __urng,
1814 const param_type& __p);
1816 param_type _M_param;
1823 template<
typename _IntType>
1827 {
return !(__d1 == __d2); }
1839 template<
typename _IntType,
typename _CharT,
typename _Traits>
1841 operator<<(std::basic_ostream<_CharT, _Traits>&,
1853 template<
typename _IntType,
typename _CharT,
typename _Traits>
1866 template<
typename _RealType =
double>
1870 "template argument not a floating point type");
1882 _RealType __b = _RealType(1))
1883 : _M_a(__a), _M_b(__b)
1885 _GLIBCXX_DEBUG_ASSERT(_M_a <= _M_b);
1898 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
1914 _RealType __b = _RealType(1))
1915 : _M_param(__a, __b)
1933 {
return _M_param.a(); }
1937 {
return _M_param.b(); }
1944 {
return _M_param; }
1952 { _M_param = __param; }
1959 {
return this->a(); }
1966 {
return this->b(); }
1971 template<
typename _UniformRandomNumberGenerator>
1974 {
return this->
operator()(__urng, _M_param); }
1976 template<
typename _UniformRandomNumberGenerator>
1978 operator()(_UniformRandomNumberGenerator& __urng,
1979 const param_type& __p)
1981 __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
1983 return (__aurng() * (__p.b() - __p.a())) + __p.a();
1986 template<
typename _ForwardIterator,
1987 typename _UniformRandomNumberGenerator>
1989 __generate(_ForwardIterator __f, _ForwardIterator __t,
1990 _UniformRandomNumberGenerator& __urng)
1991 { this->__generate(__f, __t, __urng, _M_param); }
1993 template<
typename _ForwardIterator,
1994 typename _UniformRandomNumberGenerator>
1996 __generate(_ForwardIterator __f, _ForwardIterator __t,
1997 _UniformRandomNumberGenerator& __urng,
1998 const param_type& __p)
1999 { this->__generate_impl(__f, __t, __urng, __p); }
2001 template<
typename _UniformRandomNumberGenerator>
2004 _UniformRandomNumberGenerator& __urng,
2005 const param_type& __p)
2006 { this->__generate_impl(__f, __t, __urng, __p); }
2015 {
return __d1._M_param == __d2._M_param; }
2018 template<
typename _ForwardIterator,
2019 typename _UniformRandomNumberGenerator>
2021 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2022 _UniformRandomNumberGenerator& __urng,
2023 const param_type& __p);
2025 param_type _M_param;
2032 template<
typename _IntType>
2036 {
return !(__d1 == __d2); }
2048 template<
typename _RealType,
typename _CharT,
typename _Traits>
2050 operator<<(std::basic_ostream<_CharT, _Traits>&,
2062 template<
typename _RealType,
typename _CharT,
typename _Traits>
2084 template<
typename _RealType =
double>
2088 "template argument not a floating point type");
2100 _RealType __stddev = _RealType(1))
2101 : _M_mean(__mean), _M_stddev(__stddev)
2103 _GLIBCXX_DEBUG_ASSERT(_M_stddev > _RealType(0));
2112 {
return _M_stddev; }
2116 {
return (__p1._M_mean == __p2._M_mean
2117 && __p1._M_stddev == __p2._M_stddev); }
2121 _RealType _M_stddev;
2132 : _M_param(__mean, __stddev), _M_saved_available(false)
2137 : _M_param(__p), _M_saved_available(false)
2145 { _M_saved_available =
false; }
2152 {
return _M_param.mean(); }
2159 {
return _M_param.stddev(); }
2166 {
return _M_param; }
2174 { _M_param = __param; }
2193 template<
typename _UniformRandomNumberGenerator>
2196 {
return this->
operator()(__urng, _M_param); }
2198 template<
typename _UniformRandomNumberGenerator>
2200 operator()(_UniformRandomNumberGenerator& __urng,
2201 const param_type& __p);
2203 template<
typename _ForwardIterator,
2204 typename _UniformRandomNumberGenerator>
2206 __generate(_ForwardIterator __f, _ForwardIterator __t,
2207 _UniformRandomNumberGenerator& __urng)
2208 { this->__generate(__f, __t, __urng, _M_param); }
2210 template<
typename _ForwardIterator,
2211 typename _UniformRandomNumberGenerator>
2213 __generate(_ForwardIterator __f, _ForwardIterator __t,
2214 _UniformRandomNumberGenerator& __urng,
2215 const param_type& __p)
2216 { this->__generate_impl(__f, __t, __urng, __p); }
2218 template<
typename _UniformRandomNumberGenerator>
2221 _UniformRandomNumberGenerator& __urng,
2222 const param_type& __p)
2223 { this->__generate_impl(__f, __t, __urng, __p); }
2230 template<
typename _RealType1>
2245 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2247 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
2260 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2266 template<
typename _ForwardIterator,
2267 typename _UniformRandomNumberGenerator>
2269 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2270 _UniformRandomNumberGenerator& __urng,
2271 const param_type& __p);
2273 param_type _M_param;
2275 bool _M_saved_available;
2281 template<
typename _RealType>
2285 {
return !(__d1 == __d2); }
2297 template<
typename _RealType =
double>
2301 "template argument not a floating point type");
2313 _RealType __s = _RealType(1))
2314 : _M_m(__m), _M_s(__s)
2327 {
return __p1._M_m == __p2._M_m && __p1._M_s == __p2._M_s; }
2336 _RealType __s = _RealType(1))
2337 : _M_param(__m, __s), _M_nd()
2342 : _M_param(__p), _M_nd()
2357 {
return _M_param.m(); }
2361 {
return _M_param.s(); }
2368 {
return _M_param; }
2376 { _M_param = __param; }
2395 template<
typename _UniformRandomNumberGenerator>
2398 {
return this->
operator()(__urng, _M_param); }
2400 template<
typename _UniformRandomNumberGenerator>
2402 operator()(_UniformRandomNumberGenerator& __urng,
2403 const param_type& __p)
2404 {
return std::exp(__p.s() * _M_nd(__urng) + __p.m()); }
2406 template<
typename _ForwardIterator,
2407 typename _UniformRandomNumberGenerator>
2409 __generate(_ForwardIterator __f, _ForwardIterator __t,
2410 _UniformRandomNumberGenerator& __urng)
2411 { this->__generate(__f, __t, __urng, _M_param); }
2413 template<
typename _ForwardIterator,
2414 typename _UniformRandomNumberGenerator>
2416 __generate(_ForwardIterator __f, _ForwardIterator __t,
2417 _UniformRandomNumberGenerator& __urng,
2418 const param_type& __p)
2419 { this->__generate_impl(__f, __t, __urng, __p); }
2421 template<
typename _UniformRandomNumberGenerator>
2424 _UniformRandomNumberGenerator& __urng,
2425 const param_type& __p)
2426 { this->__generate_impl(__f, __t, __urng, __p); }
2436 {
return (__d1._M_param == __d2._M_param
2437 && __d1._M_nd == __d2._M_nd); }
2449 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2451 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
2464 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2470 template<
typename _ForwardIterator,
2471 typename _UniformRandomNumberGenerator>
2473 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2474 _UniformRandomNumberGenerator& __urng,
2475 const param_type& __p);
2477 param_type _M_param;
2485 template<
typename _RealType>
2489 {
return !(__d1 == __d2); }
2501 template<
typename _RealType =
double>
2505 "template argument not a floating point type");
2517 param_type(_RealType __alpha_val = _RealType(1),
2518 _RealType __beta_val = _RealType(1))
2519 : _M_alpha(__alpha_val), _M_beta(__beta_val)
2521 _GLIBCXX_DEBUG_ASSERT(_M_alpha > _RealType(0));
2527 {
return _M_alpha; }
2534 operator==(
const param_type& __p1,
const param_type& __p2)
2535 {
return (__p1._M_alpha == __p2._M_alpha
2536 && __p1._M_beta == __p2._M_beta); }
2545 _RealType _M_malpha, _M_a2;
2555 _RealType __beta_val = _RealType(1))
2556 : _M_param(__alpha_val, __beta_val), _M_nd()
2561 : _M_param(__p), _M_nd()
2576 {
return _M_param.alpha(); }
2583 {
return _M_param.beta(); }
2590 {
return _M_param; }
2598 { _M_param = __param; }
2617 template<
typename _UniformRandomNumberGenerator>
2620 {
return this->
operator()(__urng, _M_param); }
2622 template<
typename _UniformRandomNumberGenerator>
2624 operator()(_UniformRandomNumberGenerator& __urng,
2625 const param_type& __p);
2627 template<
typename _ForwardIterator,
2628 typename _UniformRandomNumberGenerator>
2630 __generate(_ForwardIterator __f, _ForwardIterator __t,
2631 _UniformRandomNumberGenerator& __urng)
2632 { this->__generate(__f, __t, __urng, _M_param); }
2634 template<
typename _ForwardIterator,
2635 typename _UniformRandomNumberGenerator>
2637 __generate(_ForwardIterator __f, _ForwardIterator __t,
2638 _UniformRandomNumberGenerator& __urng,
2639 const param_type& __p)
2640 { this->__generate_impl(__f, __t, __urng, __p); }
2642 template<
typename _UniformRandomNumberGenerator>
2645 _UniformRandomNumberGenerator& __urng,
2646 const param_type& __p)
2647 { this->__generate_impl(__f, __t, __urng, __p); }
2657 {
return (__d1._M_param == __d2._M_param
2658 && __d1._M_nd == __d2._M_nd); }
2670 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2672 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
2684 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2690 template<
typename _ForwardIterator,
2691 typename _UniformRandomNumberGenerator>
2693 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2694 _UniformRandomNumberGenerator& __urng,
2695 const param_type& __p);
2697 param_type _M_param;
2705 template<
typename _RealType>
2709 {
return !(__d1 == __d2); }
2718 template<
typename _RealType =
double>
2722 "template argument not a floating point type");
2743 {
return __p1._M_n == __p2._M_n; }
2751 : _M_param(__n), _M_gd(__n / 2)
2756 : _M_param(__p), _M_gd(__p.n() / 2)
2771 {
return _M_param.n(); }
2778 {
return _M_param; }
2786 { _M_param = __param; }
2805 template<
typename _UniformRandomNumberGenerator>
2808 {
return 2 * _M_gd(__urng); }
2810 template<
typename _UniformRandomNumberGenerator>
2812 operator()(_UniformRandomNumberGenerator& __urng,
2813 const param_type& __p)
2817 return 2 * _M_gd(__urng, param_type(__p.n() / 2));
2820 template<
typename _ForwardIterator,
2821 typename _UniformRandomNumberGenerator>
2823 __generate(_ForwardIterator __f, _ForwardIterator __t,
2824 _UniformRandomNumberGenerator& __urng)
2825 { this->__generate_impl(__f, __t, __urng); }
2827 template<
typename _ForwardIterator,
2828 typename _UniformRandomNumberGenerator>
2830 __generate(_ForwardIterator __f, _ForwardIterator __t,
2831 _UniformRandomNumberGenerator& __urng,
2832 const param_type& __p)
2835 this->__generate_impl(__f, __t, __urng, __p2); }
2837 template<
typename _UniformRandomNumberGenerator>
2840 _UniformRandomNumberGenerator& __urng)
2841 { this->__generate_impl(__f, __t, __urng); }
2843 template<
typename _UniformRandomNumberGenerator>
2846 _UniformRandomNumberGenerator& __urng,
2847 const param_type& __p)
2850 this->__generate_impl(__f, __t, __urng, __p2); }
2860 {
return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
2872 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2874 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
2887 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2893 template<
typename _ForwardIterator,
2894 typename _UniformRandomNumberGenerator>
2896 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2897 _UniformRandomNumberGenerator& __urng);
2899 template<
typename _ForwardIterator,
2900 typename _UniformRandomNumberGenerator>
2902 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2903 _UniformRandomNumberGenerator& __urng,
2907 param_type _M_param;
2915 template<
typename _RealType>
2919 {
return !(__d1 == __d2); }
2928 template<
typename _RealType =
double>
2932 "template argument not a floating point type");
2943 param_type(_RealType __a = _RealType(0),
2944 _RealType __b = _RealType(1))
2945 : _M_a(__a), _M_b(__b)
2957 operator==(
const param_type& __p1,
const param_type& __p2)
2958 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
2967 _RealType __b = _RealType(1))
2968 : _M_param(__a, __b)
2988 {
return _M_param.a(); }
2992 {
return _M_param.b(); }
2999 {
return _M_param; }
3007 { _M_param = __param; }
3026 template<
typename _UniformRandomNumberGenerator>
3029 {
return this->
operator()(__urng, _M_param); }
3031 template<
typename _UniformRandomNumberGenerator>
3033 operator()(_UniformRandomNumberGenerator& __urng,
3034 const param_type& __p);
3036 template<
typename _ForwardIterator,
3037 typename _UniformRandomNumberGenerator>
3039 __generate(_ForwardIterator __f, _ForwardIterator __t,
3040 _UniformRandomNumberGenerator& __urng)
3041 { this->__generate(__f, __t, __urng, _M_param); }
3043 template<
typename _ForwardIterator,
3044 typename _UniformRandomNumberGenerator>
3046 __generate(_ForwardIterator __f, _ForwardIterator __t,
3047 _UniformRandomNumberGenerator& __urng,
3048 const param_type& __p)
3049 { this->__generate_impl(__f, __t, __urng, __p); }
3051 template<
typename _UniformRandomNumberGenerator>
3054 _UniformRandomNumberGenerator& __urng,
3055 const param_type& __p)
3056 { this->__generate_impl(__f, __t, __urng, __p); }
3065 {
return __d1._M_param == __d2._M_param; }
3068 template<
typename _ForwardIterator,
3069 typename _UniformRandomNumberGenerator>
3071 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3072 _UniformRandomNumberGenerator& __urng,
3073 const param_type& __p);
3075 param_type _M_param;
3082 template<
typename _RealType>
3086 {
return !(__d1 == __d2); }
3098 template<
typename _RealType,
typename _CharT,
typename _Traits>
3100 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
3113 template<
typename _RealType,
typename _CharT,
typename _Traits>
3129 template<
typename _RealType =
double>
3133 "template argument not a floating point type");
3144 param_type(_RealType __m = _RealType(1),
3145 _RealType __n = _RealType(1))
3146 : _M_m(__m), _M_n(__n)
3158 operator==(
const param_type& __p1,
const param_type& __p2)
3159 {
return __p1._M_m == __p2._M_m && __p1._M_n == __p2._M_n; }
3168 _RealType __n = _RealType(1))
3169 : _M_param(__m, __n), _M_gd_x(__m / 2), _M_gd_y(__n / 2)
3174 : _M_param(__p), _M_gd_x(__p.m() / 2), _M_gd_y(__p.n() / 2)
3192 {
return _M_param.m(); }
3196 {
return _M_param.n(); }
3203 {
return _M_param; }
3211 { _M_param = __param; }
3230 template<
typename _UniformRandomNumberGenerator>
3233 {
return (_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m()); }
3235 template<
typename _UniformRandomNumberGenerator>
3237 operator()(_UniformRandomNumberGenerator& __urng,
3238 const param_type& __p)
3242 return ((_M_gd_x(__urng, param_type(__p.m() / 2)) * n())
3243 / (_M_gd_y(__urng, param_type(__p.n() / 2)) * m()));
3246 template<
typename _ForwardIterator,
3247 typename _UniformRandomNumberGenerator>
3249 __generate(_ForwardIterator __f, _ForwardIterator __t,
3250 _UniformRandomNumberGenerator& __urng)
3251 { this->__generate_impl(__f, __t, __urng); }
3253 template<
typename _ForwardIterator,
3254 typename _UniformRandomNumberGenerator>
3256 __generate(_ForwardIterator __f, _ForwardIterator __t,
3257 _UniformRandomNumberGenerator& __urng,
3258 const param_type& __p)
3259 { this->__generate_impl(__f, __t, __urng, __p); }
3261 template<
typename _UniformRandomNumberGenerator>
3264 _UniformRandomNumberGenerator& __urng)
3265 { this->__generate_impl(__f, __t, __urng); }
3267 template<
typename _UniformRandomNumberGenerator>
3270 _UniformRandomNumberGenerator& __urng,
3271 const param_type& __p)
3272 { this->__generate_impl(__f, __t, __urng, __p); }
3282 {
return (__d1._M_param == __d2._M_param
3283 && __d1._M_gd_x == __d2._M_gd_x
3284 && __d1._M_gd_y == __d2._M_gd_y); }
3296 template<
typename _RealType1,
typename _CharT,
typename _Traits>
3298 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
3311 template<
typename _RealType1,
typename _CharT,
typename _Traits>
3317 template<
typename _ForwardIterator,
3318 typename _UniformRandomNumberGenerator>
3320 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3321 _UniformRandomNumberGenerator& __urng);
3323 template<
typename _ForwardIterator,
3324 typename _UniformRandomNumberGenerator>
3326 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3327 _UniformRandomNumberGenerator& __urng,
3328 const param_type& __p);
3330 param_type _M_param;
3338 template<
typename _RealType>
3342 {
return !(__d1 == __d2); }
3353 template<
typename _RealType =
double>
3357 "template argument not a floating point type");
3368 param_type(_RealType __n = _RealType(1))
3377 operator==(
const param_type& __p1,
const param_type& __p2)
3378 {
return __p1._M_n == __p2._M_n; }
3386 : _M_param(__n), _M_nd(), _M_gd(__n / 2, 2)
3391 : _M_param(__p), _M_nd(), _M_gd(__p.n() / 2, 2)
3409 {
return _M_param.n(); }
3416 {
return _M_param; }
3424 { _M_param = __param; }
3443 template<
typename _UniformRandomNumberGenerator>
3446 {
return _M_nd(__urng) *
std::sqrt(n() / _M_gd(__urng)); }
3448 template<
typename _UniformRandomNumberGenerator>
3450 operator()(_UniformRandomNumberGenerator& __urng,
3451 const param_type& __p)
3456 const result_type __g = _M_gd(__urng, param_type(__p.n() / 2, 2));
3457 return _M_nd(__urng) *
std::sqrt(__p.n() / __g);
3460 template<
typename _ForwardIterator,
3461 typename _UniformRandomNumberGenerator>
3463 __generate(_ForwardIterator __f, _ForwardIterator __t,
3464 _UniformRandomNumberGenerator& __urng)
3465 { this->__generate_impl(__f, __t, __urng); }
3467 template<
typename _ForwardIterator,
3468 typename _UniformRandomNumberGenerator>
3470 __generate(_ForwardIterator __f, _ForwardIterator __t,
3471 _UniformRandomNumberGenerator& __urng,
3472 const param_type& __p)
3473 { this->__generate_impl(__f, __t, __urng, __p); }
3475 template<
typename _UniformRandomNumberGenerator>
3478 _UniformRandomNumberGenerator& __urng)
3479 { this->__generate_impl(__f, __t, __urng); }
3481 template<
typename _UniformRandomNumberGenerator>
3484 _UniformRandomNumberGenerator& __urng,
3485 const param_type& __p)
3486 { this->__generate_impl(__f, __t, __urng, __p); }
3496 {
return (__d1._M_param == __d2._M_param
3497 && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); }
3509 template<
typename _RealType1,
typename _CharT,
typename _Traits>
3511 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
3524 template<
typename _RealType1,
typename _CharT,
typename _Traits>
3530 template<
typename _ForwardIterator,
3531 typename _UniformRandomNumberGenerator>
3533 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3534 _UniformRandomNumberGenerator& __urng);
3535 template<
typename _ForwardIterator,
3536 typename _UniformRandomNumberGenerator>
3538 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3539 _UniformRandomNumberGenerator& __urng,
3540 const param_type& __p);
3542 param_type _M_param;
3551 template<
typename _RealType>
3555 {
return !(__d1 == __d2); }
3583 param_type(
double __p = 0.5)
3586 _GLIBCXX_DEBUG_ASSERT((_M_p >= 0.0) && (_M_p <= 1.0));
3594 operator==(
const param_type& __p1,
const param_type& __p2)
3595 {
return __p1._M_p == __p2._M_p; }
3631 {
return _M_param.p(); }
3638 {
return _M_param; }
3646 { _M_param = __param; }
3665 template<
typename _UniformRandomNumberGenerator>
3668 {
return this->
operator()(__urng, _M_param); }
3670 template<
typename _UniformRandomNumberGenerator>
3672 operator()(_UniformRandomNumberGenerator& __urng,
3673 const param_type& __p)
3675 __detail::_Adaptor<_UniformRandomNumberGenerator, double>
3677 if ((__aurng() - __aurng.min())
3678 < __p.p() * (__aurng.max() - __aurng.min()))
3683 template<
typename _ForwardIterator,
3684 typename _UniformRandomNumberGenerator>
3686 __generate(_ForwardIterator __f, _ForwardIterator __t,
3687 _UniformRandomNumberGenerator& __urng)
3688 { this->__generate(__f, __t, __urng, _M_param); }
3690 template<
typename _ForwardIterator,
3691 typename _UniformRandomNumberGenerator>
3693 __generate(_ForwardIterator __f, _ForwardIterator __t,
3694 _UniformRandomNumberGenerator& __urng,
const param_type& __p)
3695 { this->__generate_impl(__f, __t, __urng, __p); }
3697 template<
typename _UniformRandomNumberGenerator>
3700 _UniformRandomNumberGenerator& __urng,
3701 const param_type& __p)
3702 { this->__generate_impl(__f, __t, __urng, __p); }
3711 {
return __d1._M_param == __d2._M_param; }
3714 template<
typename _ForwardIterator,
3715 typename _UniformRandomNumberGenerator>
3717 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3718 _UniformRandomNumberGenerator& __urng,
3719 const param_type& __p);
3721 param_type _M_param;
3731 {
return !(__d1 == __d2); }
3743 template<
typename _CharT,
typename _Traits>
3745 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
3757 template<
typename _CharT,
typename _Traits>
3776 template<
typename _IntType =
int>
3780 "template argument not an integral type");
3792 param_type(_IntType __t = _IntType(1),
double __p = 0.5)
3793 : _M_t(__t), _M_p(__p)
3795 _GLIBCXX_DEBUG_ASSERT((_M_t >= _IntType(0))
3810 operator==(
const param_type& __p1,
const param_type& __p2)
3811 {
return __p1._M_t == __p2._M_t && __p1._M_p == __p2._M_p; }
3821 #if _GLIBCXX_USE_C99_MATH_TR1
3822 double _M_d1, _M_d2, _M_s1, _M_s2, _M_c,
3823 _M_a1, _M_a123, _M_s, _M_lf, _M_lp1p;
3832 : _M_param(__t, __p), _M_nd()
3837 : _M_param(__p), _M_nd()
3852 {
return _M_param.t(); }
3859 {
return _M_param.p(); }
3866 {
return _M_param; }
3874 { _M_param = __param; }
3888 {
return _M_param.t(); }
3893 template<
typename _UniformRandomNumberGenerator>
3896 {
return this->
operator()(__urng, _M_param); }
3898 template<
typename _UniformRandomNumberGenerator>
3900 operator()(_UniformRandomNumberGenerator& __urng,
3901 const param_type& __p);
3903 template<
typename _ForwardIterator,
3904 typename _UniformRandomNumberGenerator>
3906 __generate(_ForwardIterator __f, _ForwardIterator __t,
3907 _UniformRandomNumberGenerator& __urng)
3908 { this->__generate(__f, __t, __urng, _M_param); }
3910 template<
typename _ForwardIterator,
3911 typename _UniformRandomNumberGenerator>
3913 __generate(_ForwardIterator __f, _ForwardIterator __t,
3914 _UniformRandomNumberGenerator& __urng,
3915 const param_type& __p)
3916 { this->__generate_impl(__f, __t, __urng, __p); }
3918 template<
typename _UniformRandomNumberGenerator>
3921 _UniformRandomNumberGenerator& __urng,
3922 const param_type& __p)
3923 { this->__generate_impl(__f, __t, __urng, __p); }
3933 #ifdef _GLIBCXX_USE_C99_MATH_TR1
3934 {
return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
3936 {
return __d1._M_param == __d2._M_param; }
3949 template<
typename _IntType1,
3950 typename _CharT,
typename _Traits>
3952 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
3965 template<
typename _IntType1,
3966 typename _CharT,
typename _Traits>
3972 template<
typename _ForwardIterator,
3973 typename _UniformRandomNumberGenerator>
3975 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
3976 _UniformRandomNumberGenerator& __urng,
3977 const param_type& __p);
3979 template<
typename _UniformRandomNumberGenerator>
3981 _M_waiting(_UniformRandomNumberGenerator& __urng,
3982 _IntType __t,
double __q);
3984 param_type _M_param;
3993 template<
typename _IntType>
3997 {
return !(__d1 == __d2); }
4007 template<
typename _IntType =
int>
4011 "template argument not an integral type");
4023 param_type(
double __p = 0.5)
4026 _GLIBCXX_DEBUG_ASSERT((_M_p > 0.0) && (_M_p < 1.0));
4035 operator==(
const param_type& __p1,
const param_type& __p2)
4036 {
return __p1._M_p == __p2._M_p; }
4041 { _M_log_1_p =
std::log(1.0 - _M_p); }
4072 {
return _M_param.p(); }
4079 {
return _M_param; }
4087 { _M_param = __param; }
4106 template<
typename _UniformRandomNumberGenerator>
4109 {
return this->
operator()(__urng, _M_param); }
4111 template<
typename _UniformRandomNumberGenerator>
4113 operator()(_UniformRandomNumberGenerator& __urng,
4114 const param_type& __p);
4116 template<
typename _ForwardIterator,
4117 typename _UniformRandomNumberGenerator>
4119 __generate(_ForwardIterator __f, _ForwardIterator __t,
4120 _UniformRandomNumberGenerator& __urng)
4121 { this->__generate(__f, __t, __urng, _M_param); }
4123 template<
typename _ForwardIterator,
4124 typename _UniformRandomNumberGenerator>
4126 __generate(_ForwardIterator __f, _ForwardIterator __t,
4127 _UniformRandomNumberGenerator& __urng,
4128 const param_type& __p)
4129 { this->__generate_impl(__f, __t, __urng, __p); }
4131 template<
typename _UniformRandomNumberGenerator>
4134 _UniformRandomNumberGenerator& __urng,
4135 const param_type& __p)
4136 { this->__generate_impl(__f, __t, __urng, __p); }
4145 {
return __d1._M_param == __d2._M_param; }
4148 template<
typename _ForwardIterator,
4149 typename _UniformRandomNumberGenerator>
4151 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4152 _UniformRandomNumberGenerator& __urng,
4153 const param_type& __p);
4155 param_type _M_param;
4162 template<
typename _IntType>
4166 {
return !(__d1 == __d2); }
4178 template<
typename _IntType,
4179 typename _CharT,
typename _Traits>
4181 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
4193 template<
typename _IntType,
4194 typename _CharT,
typename _Traits>
4207 template<
typename _IntType =
int>
4211 "template argument not an integral type");
4222 param_type(_IntType __k = 1,
double __p = 0.5)
4223 : _M_k(__k), _M_p(__p)
4225 _GLIBCXX_DEBUG_ASSERT((_M_k > 0) && (_M_p > 0.0) && (_M_p <= 1.0));
4237 operator==(
const param_type& __p1,
const param_type& __p2)
4238 {
return __p1._M_k == __p2._M_k && __p1._M_p == __p2._M_p; }
4247 : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p)
4252 : _M_param(__p), _M_gd(__p.
k(), (1.0 - __p.
p()) / __p.
p())
4267 {
return _M_param.k(); }
4274 {
return _M_param.p(); }
4281 {
return _M_param; }
4289 { _M_param = __param; }
4308 template<
typename _UniformRandomNumberGenerator>
4310 operator()(_UniformRandomNumberGenerator& __urng);
4312 template<
typename _UniformRandomNumberGenerator>
4314 operator()(_UniformRandomNumberGenerator& __urng,
4315 const param_type& __p);
4317 template<
typename _ForwardIterator,
4318 typename _UniformRandomNumberGenerator>
4320 __generate(_ForwardIterator __f, _ForwardIterator __t,
4321 _UniformRandomNumberGenerator& __urng)
4322 { this->__generate_impl(__f, __t, __urng); }
4324 template<
typename _ForwardIterator,
4325 typename _UniformRandomNumberGenerator>
4327 __generate(_ForwardIterator __f, _ForwardIterator __t,
4328 _UniformRandomNumberGenerator& __urng,
4329 const param_type& __p)
4330 { this->__generate_impl(__f, __t, __urng, __p); }
4332 template<
typename _UniformRandomNumberGenerator>
4335 _UniformRandomNumberGenerator& __urng)
4336 { this->__generate_impl(__f, __t, __urng); }
4338 template<
typename _UniformRandomNumberGenerator>
4341 _UniformRandomNumberGenerator& __urng,
4342 const param_type& __p)
4343 { this->__generate_impl(__f, __t, __urng, __p); }
4353 {
return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
4366 template<
typename _IntType1,
typename _CharT,
typename _Traits>
4368 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
4381 template<
typename _IntType1,
typename _CharT,
typename _Traits>
4387 template<
typename _ForwardIterator,
4388 typename _UniformRandomNumberGenerator>
4390 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4391 _UniformRandomNumberGenerator& __urng);
4392 template<
typename _ForwardIterator,
4393 typename _UniformRandomNumberGenerator>
4395 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4396 _UniformRandomNumberGenerator& __urng,
4397 const param_type& __p);
4399 param_type _M_param;
4407 template<
typename _IntType>
4411 {
return !(__d1 == __d2); }
4429 template<
typename _IntType =
int>
4433 "template argument not an integral type");
4445 param_type(
double __mean = 1.0)
4448 _GLIBCXX_DEBUG_ASSERT(_M_mean > 0.0);
4457 operator==(
const param_type& __p1,
const param_type& __p2)
4458 {
return __p1._M_mean == __p2._M_mean; }
4468 #if _GLIBCXX_USE_C99_MATH_TR1
4469 double _M_lfm, _M_sm, _M_d, _M_scx, _M_1cx, _M_c2b, _M_cb;
4476 : _M_param(__mean), _M_nd()
4481 : _M_param(__p), _M_nd()
4496 {
return _M_param.mean(); }
4503 {
return _M_param; }
4511 { _M_param = __param; }
4530 template<
typename _UniformRandomNumberGenerator>
4533 {
return this->
operator()(__urng, _M_param); }
4535 template<
typename _UniformRandomNumberGenerator>
4537 operator()(_UniformRandomNumberGenerator& __urng,
4538 const param_type& __p);
4540 template<
typename _ForwardIterator,
4541 typename _UniformRandomNumberGenerator>
4543 __generate(_ForwardIterator __f, _ForwardIterator __t,
4544 _UniformRandomNumberGenerator& __urng)
4545 { this->__generate(__f, __t, __urng, _M_param); }
4547 template<
typename _ForwardIterator,
4548 typename _UniformRandomNumberGenerator>
4550 __generate(_ForwardIterator __f, _ForwardIterator __t,
4551 _UniformRandomNumberGenerator& __urng,
4552 const param_type& __p)
4553 { this->__generate_impl(__f, __t, __urng, __p); }
4555 template<
typename _UniformRandomNumberGenerator>
4558 _UniformRandomNumberGenerator& __urng,
4559 const param_type& __p)
4560 { this->__generate_impl(__f, __t, __urng, __p); }
4570 #ifdef _GLIBCXX_USE_C99_MATH_TR1
4571 {
return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
4573 {
return __d1._M_param == __d2._M_param; }
4586 template<
typename _IntType1,
typename _CharT,
typename _Traits>
4588 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
4601 template<
typename _IntType1,
typename _CharT,
typename _Traits>
4607 template<
typename _ForwardIterator,
4608 typename _UniformRandomNumberGenerator>
4610 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4611 _UniformRandomNumberGenerator& __urng,
4612 const param_type& __p);
4614 param_type _M_param;
4623 template<
typename _IntType>
4627 {
return !(__d1 == __d2); }
4645 template<
typename _RealType =
double>
4649 "template argument not a floating point type");
4660 param_type(_RealType __lambda = _RealType(1))
4661 : _M_lambda(__lambda)
4663 _GLIBCXX_DEBUG_ASSERT(_M_lambda > _RealType(0));
4668 {
return _M_lambda; }
4671 operator==(
const param_type& __p1,
const param_type& __p2)
4672 {
return __p1._M_lambda == __p2._M_lambda; }
4675 _RealType _M_lambda;
4685 : _M_param(__lambda)
4706 {
return _M_param.lambda(); }
4713 {
return _M_param; }
4721 { _M_param = __param; }
4740 template<
typename _UniformRandomNumberGenerator>
4743 {
return this->
operator()(__urng, _M_param); }
4745 template<
typename _UniformRandomNumberGenerator>
4747 operator()(_UniformRandomNumberGenerator& __urng,
4748 const param_type& __p)
4750 __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
4755 template<
typename _ForwardIterator,
4756 typename _UniformRandomNumberGenerator>
4758 __generate(_ForwardIterator __f, _ForwardIterator __t,
4759 _UniformRandomNumberGenerator& __urng)
4760 { this->__generate(__f, __t, __urng, _M_param); }
4762 template<
typename _ForwardIterator,
4763 typename _UniformRandomNumberGenerator>
4765 __generate(_ForwardIterator __f, _ForwardIterator __t,
4766 _UniformRandomNumberGenerator& __urng,
4767 const param_type& __p)
4768 { this->__generate_impl(__f, __t, __urng, __p); }
4770 template<
typename _UniformRandomNumberGenerator>
4773 _UniformRandomNumberGenerator& __urng,
4774 const param_type& __p)
4775 { this->__generate_impl(__f, __t, __urng, __p); }
4784 {
return __d1._M_param == __d2._M_param; }
4787 template<
typename _ForwardIterator,
4788 typename _UniformRandomNumberGenerator>
4790 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4791 _UniformRandomNumberGenerator& __urng,
4792 const param_type& __p);
4794 param_type _M_param;
4801 template<
typename _RealType>
4805 {
return !(__d1 == __d2); }
4817 template<
typename _RealType,
typename _CharT,
typename _Traits>
4819 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
4832 template<
typename _RealType,
typename _CharT,
typename _Traits>
4847 template<
typename _RealType =
double>
4851 "template argument not a floating point type");
4862 param_type(_RealType __a = _RealType(1),
4863 _RealType __b = _RealType(1))
4864 : _M_a(__a), _M_b(__b)
4876 operator==(
const param_type& __p1,
const param_type& __p2)
4877 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
4886 _RealType __b = _RealType(1))
4887 : _M_param(__a, __b)
4907 {
return _M_param.a(); }
4914 {
return _M_param.b(); }
4921 {
return _M_param; }
4929 { _M_param = __param; }
4948 template<
typename _UniformRandomNumberGenerator>
4951 {
return this->
operator()(__urng, _M_param); }
4953 template<
typename _UniformRandomNumberGenerator>
4955 operator()(_UniformRandomNumberGenerator& __urng,
4956 const param_type& __p);
4958 template<
typename _ForwardIterator,
4959 typename _UniformRandomNumberGenerator>
4961 __generate(_ForwardIterator __f, _ForwardIterator __t,
4962 _UniformRandomNumberGenerator& __urng)
4963 { this->__generate(__f, __t, __urng, _M_param); }
4965 template<
typename _ForwardIterator,
4966 typename _UniformRandomNumberGenerator>
4968 __generate(_ForwardIterator __f, _ForwardIterator __t,
4969 _UniformRandomNumberGenerator& __urng,
4970 const param_type& __p)
4971 { this->__generate_impl(__f, __t, __urng, __p); }
4973 template<
typename _UniformRandomNumberGenerator>
4976 _UniformRandomNumberGenerator& __urng,
4977 const param_type& __p)
4978 { this->__generate_impl(__f, __t, __urng, __p); }
4987 {
return __d1._M_param == __d2._M_param; }
4990 template<
typename _ForwardIterator,
4991 typename _UniformRandomNumberGenerator>
4993 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
4994 _UniformRandomNumberGenerator& __urng,
4995 const param_type& __p);
4997 param_type _M_param;
5004 template<
typename _RealType>
5008 {
return !(__d1 == __d2); }
5020 template<
typename _RealType,
typename _CharT,
typename _Traits>
5022 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
5035 template<
typename _RealType,
typename _CharT,
typename _Traits>
5050 template<
typename _RealType =
double>
5054 "template argument not a floating point type");
5065 param_type(_RealType __a = _RealType(0),
5066 _RealType __b = _RealType(1))
5067 : _M_a(__a), _M_b(__b)
5079 operator==(
const param_type& __p1,
const param_type& __p2)
5080 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
5089 _RealType __b = _RealType(1))
5090 : _M_param(__a, __b)
5110 {
return _M_param.a(); }
5117 {
return _M_param.b(); }
5124 {
return _M_param; }
5132 { _M_param = __param; }
5151 template<
typename _UniformRandomNumberGenerator>
5154 {
return this->
operator()(__urng, _M_param); }
5156 template<
typename _UniformRandomNumberGenerator>
5158 operator()(_UniformRandomNumberGenerator& __urng,
5159 const param_type& __p);
5161 template<
typename _ForwardIterator,
5162 typename _UniformRandomNumberGenerator>
5164 __generate(_ForwardIterator __f, _ForwardIterator __t,
5165 _UniformRandomNumberGenerator& __urng)
5166 { this->__generate(__f, __t, __urng, _M_param); }
5168 template<
typename _ForwardIterator,
5169 typename _UniformRandomNumberGenerator>
5171 __generate(_ForwardIterator __f, _ForwardIterator __t,
5172 _UniformRandomNumberGenerator& __urng,
5173 const param_type& __p)
5174 { this->__generate_impl(__f, __t, __urng, __p); }
5176 template<
typename _UniformRandomNumberGenerator>
5179 _UniformRandomNumberGenerator& __urng,
5180 const param_type& __p)
5181 { this->__generate_impl(__f, __t, __urng, __p); }
5190 {
return __d1._M_param == __d2._M_param; }
5193 template<
typename _ForwardIterator,
5194 typename _UniformRandomNumberGenerator>
5196 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
5197 _UniformRandomNumberGenerator& __urng,
5198 const param_type& __p);
5200 param_type _M_param;
5207 template<
typename _RealType>
5211 {
return !(__d1 == __d2); }
5223 template<
typename _RealType,
typename _CharT,
typename _Traits>
5225 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
5238 template<
typename _RealType,
typename _CharT,
typename _Traits>
5250 template<
typename _IntType =
int>
5254 "template argument not an integral type");
5266 : _M_prob(), _M_cp()
5269 template<
typename _InputIterator>
5270 param_type(_InputIterator __wbegin,
5271 _InputIterator __wend)
5272 : _M_prob(__wbegin, __wend), _M_cp()
5273 { _M_initialize(); }
5276 : _M_prob(__wil.begin(), __wil.end()), _M_cp()
5277 { _M_initialize(); }
5279 template<
typename _Func>
5280 param_type(
size_t __nw,
double __xmin,
double __xmax,
5284 param_type(
const param_type&) =
default;
5285 param_type& operator=(
const param_type&) =
default;
5288 probabilities()
const
5292 operator==(
const param_type& __p1,
const param_type& __p2)
5293 {
return __p1._M_prob == __p2._M_prob; }
5307 template<
typename _InputIterator>
5309 _InputIterator __wend)
5310 : _M_param(__wbegin, __wend)
5313 discrete_distribution(initializer_list<double> __wl)
5317 template<
typename _Func>
5318 discrete_distribution(
size_t __nw,
double __xmin,
double __xmax,
5320 : _M_param(__nw, __xmin, __xmax, __fw)
5324 discrete_distribution(
const param_type& __p)
5341 return _M_param._M_prob.
empty()
5350 {
return _M_param; }
5358 { _M_param = __param; }
5373 return _M_param._M_prob.
empty()
5380 template<
typename _UniformRandomNumberGenerator>
5383 {
return this->
operator()(__urng, _M_param); }
5385 template<
typename _UniformRandomNumberGenerator>
5387 operator()(_UniformRandomNumberGenerator& __urng,
5388 const param_type& __p);
5390 template<
typename _ForwardIterator,
5391 typename _UniformRandomNumberGenerator>
5393 __generate(_ForwardIterator __f, _ForwardIterator __t,
5394 _UniformRandomNumberGenerator& __urng)
5395 { this->__generate(__f, __t, __urng, _M_param); }
5397 template<
typename _ForwardIterator,
5398 typename _UniformRandomNumberGenerator>
5400 __generate(_ForwardIterator __f, _ForwardIterator __t,
5401 _UniformRandomNumberGenerator& __urng,
5402 const param_type& __p)
5403 { this->__generate_impl(__f, __t, __urng, __p); }
5405 template<
typename _UniformRandomNumberGenerator>
5408 _UniformRandomNumberGenerator& __urng,
5409 const param_type& __p)
5410 { this->__generate_impl(__f, __t, __urng, __p); }
5419 {
return __d1._M_param == __d2._M_param; }
5431 template<
typename _IntType1,
typename _CharT,
typename _Traits>
5433 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
5447 template<
typename _IntType1,
typename _CharT,
typename _Traits>
5453 template<
typename _ForwardIterator,
5454 typename _UniformRandomNumberGenerator>
5456 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
5457 _UniformRandomNumberGenerator& __urng,
5458 const param_type& __p);
5460 param_type _M_param;
5467 template<
typename _IntType>
5471 {
return !(__d1 == __d2); }
5480 template<
typename _RealType =
double>
5484 "template argument not a floating point type");
5496 : _M_int(), _M_den(), _M_cp()
5499 template<
typename _InputIteratorB,
typename _InputIteratorW>
5500 param_type(_InputIteratorB __bfirst,
5501 _InputIteratorB __bend,
5502 _InputIteratorW __wbegin);
5504 template<
typename _Func>
5507 template<
typename _Func>
5508 param_type(
size_t __nw, _RealType __xmin, _RealType __xmax,
5512 param_type(
const param_type&) =
default;
5513 param_type& operator=(
const param_type&) =
default;
5521 __tmp[1] = _RealType(1);
5533 operator==(
const param_type& __p1,
const param_type& __p2)
5534 {
return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; }
5550 template<
typename _InputIteratorB,
typename _InputIteratorW>
5552 _InputIteratorB __bend,
5553 _InputIteratorW __wbegin)
5554 : _M_param(__bfirst, __bend, __wbegin)
5557 template<
typename _Func>
5558 piecewise_constant_distribution(initializer_list<_RealType> __bl,
5560 : _M_param(__bl, __fw)
5563 template<
typename _Func>
5564 piecewise_constant_distribution(
size_t __nw,
5565 _RealType __xmin, _RealType __xmax,
5567 : _M_param(__nw, __xmin, __xmax, __fw)
5571 piecewise_constant_distribution(
const param_type& __p)
5588 if (_M_param._M_int.
empty())
5591 __tmp[1] = _RealType(1);
5595 return _M_param._M_int;
5604 return _M_param._M_den.
empty()
5613 {
return _M_param; }
5621 { _M_param = __param; }
5629 return _M_param._M_int.
empty()
5639 return _M_param._M_int.
empty()
5646 template<
typename _UniformRandomNumberGenerator>
5649 {
return this->
operator()(__urng, _M_param); }
5651 template<
typename _UniformRandomNumberGenerator>
5653 operator()(_UniformRandomNumberGenerator& __urng,
5654 const param_type& __p);
5656 template<
typename _ForwardIterator,
5657 typename _UniformRandomNumberGenerator>
5659 __generate(_ForwardIterator __f, _ForwardIterator __t,
5660 _UniformRandomNumberGenerator& __urng)
5661 { this->__generate(__f, __t, __urng, _M_param); }
5663 template<
typename _ForwardIterator,
5664 typename _UniformRandomNumberGenerator>
5666 __generate(_ForwardIterator __f, _ForwardIterator __t,
5667 _UniformRandomNumberGenerator& __urng,
5668 const param_type& __p)
5669 { this->__generate_impl(__f, __t, __urng, __p); }
5671 template<
typename _UniformRandomNumberGenerator>
5674 _UniformRandomNumberGenerator& __urng,
5675 const param_type& __p)
5676 { this->__generate_impl(__f, __t, __urng, __p); }
5685 {
return __d1._M_param == __d2._M_param; }
5698 template<
typename _RealType1,
typename _CharT,
typename _Traits>
5700 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
5714 template<
typename _RealType1,
typename _CharT,
typename _Traits>
5720 template<
typename _ForwardIterator,
5721 typename _UniformRandomNumberGenerator>
5723 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
5724 _UniformRandomNumberGenerator& __urng,
5725 const param_type& __p);
5727 param_type _M_param;
5734 template<
typename _RealType>
5738 {
return !(__d1 == __d2); }
5747 template<
typename _RealType =
double>
5751 "template argument not a floating point type");
5763 : _M_int(), _M_den(), _M_cp(), _M_m()
5766 template<
typename _InputIteratorB,
typename _InputIteratorW>
5767 param_type(_InputIteratorB __bfirst,
5768 _InputIteratorB __bend,
5769 _InputIteratorW __wbegin);
5771 template<
typename _Func>
5774 template<
typename _Func>
5775 param_type(
size_t __nw, _RealType __xmin, _RealType __xmax,
5779 param_type(
const param_type&) =
default;
5780 param_type& operator=(
const param_type&) =
default;
5788 __tmp[1] = _RealType(1);
5800 operator==(
const param_type& __p1,
const param_type& __p2)
5801 {
return (__p1._M_int == __p2._M_int
5802 && __p1._M_den == __p2._M_den); }
5819 template<
typename _InputIteratorB,
typename _InputIteratorW>
5821 _InputIteratorB __bend,
5822 _InputIteratorW __wbegin)
5823 : _M_param(__bfirst, __bend, __wbegin)
5826 template<
typename _Func>
5827 piecewise_linear_distribution(initializer_list<_RealType> __bl,
5829 : _M_param(__bl, __fw)
5832 template<
typename _Func>
5833 piecewise_linear_distribution(
size_t __nw,
5834 _RealType __xmin, _RealType __xmax,
5836 : _M_param(__nw, __xmin, __xmax, __fw)
5840 piecewise_linear_distribution(
const param_type& __p)
5857 if (_M_param._M_int.
empty())
5860 __tmp[1] = _RealType(1);
5864 return _M_param._M_int;
5874 return _M_param._M_den.
empty()
5883 {
return _M_param; }
5891 { _M_param = __param; }
5899 return _M_param._M_int.
empty()
5909 return _M_param._M_int.
empty()
5916 template<
typename _UniformRandomNumberGenerator>
5919 {
return this->
operator()(__urng, _M_param); }
5921 template<
typename _UniformRandomNumberGenerator>
5923 operator()(_UniformRandomNumberGenerator& __urng,
5924 const param_type& __p);
5926 template<
typename _ForwardIterator,
5927 typename _UniformRandomNumberGenerator>
5929 __generate(_ForwardIterator __f, _ForwardIterator __t,
5930 _UniformRandomNumberGenerator& __urng)
5931 { this->__generate(__f, __t, __urng, _M_param); }
5933 template<
typename _ForwardIterator,
5934 typename _UniformRandomNumberGenerator>
5936 __generate(_ForwardIterator __f, _ForwardIterator __t,
5937 _UniformRandomNumberGenerator& __urng,
5938 const param_type& __p)
5939 { this->__generate_impl(__f, __t, __urng, __p); }
5941 template<
typename _UniformRandomNumberGenerator>
5944 _UniformRandomNumberGenerator& __urng,
5945 const param_type& __p)
5946 { this->__generate_impl(__f, __t, __urng, __p); }
5955 {
return __d1._M_param == __d2._M_param; }
5968 template<
typename _RealType1,
typename _CharT,
typename _Traits>
5970 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
5984 template<
typename _RealType1,
typename _CharT,
typename _Traits>
5990 template<
typename _ForwardIterator,
5991 typename _UniformRandomNumberGenerator>
5993 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
5994 _UniformRandomNumberGenerator& __urng,
5995 const param_type& __p);
5997 param_type _M_param;
6004 template<
typename _RealType>
6008 {
return !(__d1 == __d2); }
6037 template<
typename _IntType>
6040 template<
typename _InputIterator>
6041 seed_seq(_InputIterator __begin, _InputIterator __end);
6044 template<
typename _RandomAccessIterator>
6046 generate(_RandomAccessIterator __begin, _RandomAccessIterator __end);
6050 {
return _M_v.
size(); }
6052 template<
typename OutputIterator>
6054 param(OutputIterator __dest)
const
6055 { std::copy(_M_v.
begin(), _M_v.
end(), __dest); }
6066 _GLIBCXX_END_NAMESPACE_VERSION
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
param_type param() const
Returns the parameter set of the distribution.
result_type max() const
Returns the least upper bound value of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::negative_binomial_distribution< _IntType1 > &__x)
Extracts a negative_binomial_distribution random number distribution __x from the input stream __is...
friend bool operator==(const poisson_distribution &__d1, const poisson_distribution &__d2)
Return true if two Poisson distributions have the same parameters and the sequences that would be gen...
linear_congruential_engine(_Sseq &__q)
Constructs a linear_congruential_engine random number generator engine seeded from the seed sequence ...
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
void reset()
Resets the distribution state.
param_type param() const
Returns the parameter set of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::fisher_f_distribution< _RealType1 > &__x)
Extracts a fisher_f_distribution random number distribution __x from the input stream __is...
friend bool operator==(const independent_bits_engine &__lhs, const independent_bits_engine &__rhs)
Compares two independent_bits_engine random number generator objects of the same type for equality...
param_type param() const
Returns the parameter set of the distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
friend bool operator==(const exponential_distribution &__d1, const exponential_distribution &__d2)
Return true if two exponential distributions have the same parameters.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::discrete_distribution< _IntType1 > &__x)
Extracts a discrete_distribution random number distribution __x from the input stream __is...
void param(const param_type &__param)
Sets the parameter set of the distribution.
A discrete geometric random number distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
param_type param() const
Returns the parameter set of the distribution.
uint_least32_t result_type
friend bool operator==(const binomial_distribution &__d1, const binomial_distribution &__d2)
Return true if two binomial distributions have the same parameters and the sequences that would be ge...
void reset()
Resets the distribution state.
result_type max() const
Returns the least upper bound value of the distribution.
A weibull_distribution random number distribution.
void reset()
Resets the distribution state.
param_type param() const
Returns the parameter set of the distribution.
void reset()
Resets the distribution state.
double p() const
Returns the distribution parameter p.
result_type max() const
Returns the least upper bound value of the distribution.
_IntType t() const
Returns the distribution t parameter.
result_type min() const
Returns the greatest lower bound value of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::linear_congruential_engine< _UIntType1, __a1, __c1, __m1 > &__lcr)
Sets the state of the engine by reading its textual representation from __is.
reference back() noexcept
static constexpr result_type max()
Gets the maximum value in the generated random number range.
static constexpr result_type max()
Gets the maximum value in the generated random number range.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
friend bool operator==(const extreme_value_distribution &__d1, const extreme_value_distribution &__d2)
Return true if two extreme value distributions have the same parameters.
Produces random numbers by combining random numbers from some base engine to produce random numbers w...
_RandomNumberEngine::result_type result_type
result_type max() const
Returns the least upper bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
void seed(_Sseq &__q)
Reseeds the discard_block_engine object with the given seed sequence.
void reset()
Resets the distribution state.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
double p() const
Return the parameter of the distribution.
A fisher_f_distribution random number distribution.
result_type max() const
Returns the least upper bound value of the distribution.
A piecewise_linear_distribution random number distribution.
_RealType a() const
Return the parameter of the distribution.
discard_block_engine(_Sseq &__q)
Generator construct a discard_block_engine engine.
void param(const param_type &__param)
Sets the parameter set of the distribution.
friend bool operator==(const uniform_int_distribution &__d1, const uniform_int_distribution &__d2)
Return true if two uniform integer distributions have the same parameters.
static constexpr result_type max()
friend bool operator==(const uniform_real_distribution &__d1, const uniform_real_distribution &__d2)
Return true if two uniform real distributions have the same parameters.
A Bernoulli random number distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::poisson_distribution< _IntType1 > &__x)
Extracts a poisson_distribution random number distribution __x from the input stream __is...
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
double p() const
Returns the distribution p parameter.
void param(const param_type &__param)
Sets the parameter set of the distribution.
Template class basic_istream.
friend bool operator==(const student_t_distribution &__d1, const student_t_distribution &__d2)
Return true if two Student t distributions have the same parameters and the sequences that would be g...
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
bitset< _Nb > & reset() noexcept
Sets every bit to false.
friend bool operator==(const piecewise_constant_distribution &__d1, const piecewise_constant_distribution &__d2)
Return true if two piecewise constant distributions have the same parameters.
result_type min() const
Returns the greatest lower bound value of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::shuffle_order_engine< _RandomNumberEngine1, __k1 > &__x)
Extracts the current state of a % subtract_with_carry_engine random number generator engine __x from ...
result_type max() const
Returns the least upper bound value of the distribution.
void reset()
Resets the distribution state.
void param(const param_type &__param)
Sets the parameter set of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type max() const
Returns the least upper bound value of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::mersenne_twister_engine< _UIntType1, __w1, __n1, __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1, __l1, __f1 > &__x)
Extracts the current state of a % mersenne_twister_engine random number generator engine __x from the...
param_type param() const
Returns the parameter set of the distribution.
static constexpr result_type min()
Gets the minimum value in the generated random number range.
result_type max() const
Returns the least upper bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
Properties of fundamental types.
void param(const param_type &__param)
Sets the parameter set of the distribution.
discard_block_engine()
Constructs a default discard_block_engine engine.
independent_bits_engine()
Constructs a default independent_bits_engine engine.
void param(const param_type &__param)
Sets the parameter set of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type max() const
Returns the least upper bound value of the distribution.
A cauchy_distribution random number distribution.
_RealType stddev() const
Returns the standard deviation of the distribution.
uniform_real_distribution(_RealType __a=_RealType(0), _RealType __b=_RealType(1))
Constructs a uniform_real_distribution object.
result_type max() const
Returns the least upper bound value of the distribution.
constexpr int __lg(int __n)
This is a helper function for the sort routines and for random.tcc.
A student_t_distribution random number distribution.
independent_bits_engine(_RandomNumberEngine &&__rng)
Move constructs a independent_bits_engine engine.
reference front() noexcept
A discrete binomial random number distribution.
shuffle_order_engine(_RandomNumberEngine &&__rng)
Move constructs a shuffle_order_engine engine.
param_type param() const
Returns the parameter set of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
result_type max() const
Returns the inclusive upper bound of the distribution range.
static constexpr result_type increment
result_type min() const
Returns the greatest lower bound value of the distribution.
A extreme_value_distribution random number distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
size_type size() const noexcept
void reset()
Resets the distribution state.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::chi_squared_distribution< _RealType1 > &__x)
Extracts a chi_squared_distribution random number distribution __x from the input stream __is...
void seed(_Sseq &__q)
Reseeds the independent_bits_engine object with the given seed sequence.
A discrete_distribution random number distribution.
friend bool operator==(const cauchy_distribution &__d1, const cauchy_distribution &__d2)
Return true if two Cauchy distributions have the same parameters.
result_type min() const
Returns the greatest lower bound value of the distribution.
static constexpr result_type max()
Gets the largest possible value in the output range.
param_type param() const
Returns the parameter set of the distribution.
void reset()
Resets the distribution state.
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
independent_bits_engine(result_type __s)
Seed constructs a independent_bits_engine engine.
static constexpr _Tp max() noexcept
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type min() const
Returns the inclusive lower bound of the distribution range.
friend bool operator==(const negative_binomial_distribution &__d1, const negative_binomial_distribution &__d2)
Return true if two negative binomial distributions have the same parameters and the sequences that wo...
shuffle_order_engine(const _RandomNumberEngine &__rng)
Copy constructs a shuffle_order_engine engine.
std::vector< double > probabilities() const
Returns the probabilities of the distribution.
param_type param() const
Returns the parameter set of the distribution.
result_type max() const
Returns the least upper bound value of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
const _Tp & max(const _Tp &, const _Tp &)
This does what you think it does.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
void discard(unsigned long long __z)
Discard a sequence of random numbers.
void discard(unsigned long long __z)
Discard a sequence of random numbers.
The seed_seq class generates sequences of seeds for random number generators.
_RealType a() const
Return the parameter of the distribution.
_RealType b() const
Return the parameter of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::binomial_distribution< _IntType1 > &__x)
Extracts a binomial_distribution random number distribution __x from the input stream __is...
iterator begin() noexcept
result_type max() const
Returns the least upper bound value of the distribution.
A discrete Poisson random number distribution.
_RealType beta() const
Returns the of the distribution.
friend bool operator==(const bernoulli_distribution &__d1, const bernoulli_distribution &__d2)
Return true if two Bernoulli distributions have the same parameters.
discard_block_engine(_RandomNumberEngine &&__rng)
Move constructs a discard_block_engine engine.
void param(const param_type &__param)
Sets the parameter set of the distribution.
bool equal(_II1 __first1, _II1 __last1, _II2 __first2)
Tests a range for element-wise equality.
linear_congruential_engine(result_type __s=default_seed)
Constructs a linear_congruential_engine random number generator engine with seed __s. The default seed value is 1.
shuffle_order_engine(result_type __s)
Seed constructs a shuffle_order_engine engine.
std::vector< _RealType > intervals() const
Returns a vector of the intervals.
discard_block_engine(const _RandomNumberEngine &__rng)
Copy constructs a discard_block_engine engine.
_RealType b() const
Return the parameter of the distribution.
_RandomNumberEngine::result_type result_type
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
friend bool operator==(const fisher_f_distribution &__d1, const fisher_f_distribution &__d2)
Return true if two Fisher f distributions have the same parameters and the sequences that would be ge...
independent_bits_engine(const _RandomNumberEngine &__rng)
Copy constructs a independent_bits_engine engine.
const _RandomNumberEngine & base() const noexcept
Gets a const reference to the underlying generator engine object.
result_type max() const
Returns the least upper bound value of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::independent_bits_engine< _RandomNumberEngine, __w, _UIntType > &__x)
Extracts the current state of a % subtract_with_carry_engine random number generator engine __x from ...
shuffle_order_engine(_Sseq &__q)
Generator construct a shuffle_order_engine engine.
result_type min() const
Returns the greatest lower bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
void reset()
Resets the distribution state.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::normal_distribution< _RealType1 > &__x)
Extracts a normal_distribution random number distribution __x from the input stream __is...
const _Tp & min(const _Tp &, const _Tp &)
This does what you think it does.
friend bool operator==(const std::normal_distribution< _RealType1 > &__d1, const std::normal_distribution< _RealType1 > &__d2)
Return true if two normal distributions have the same parameters and the sequences that would be gene...
static constexpr result_type max()
Gets the largest possible value in the output range.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::gamma_distribution< _RealType1 > &__x)
Extracts a gamma_distribution random number distribution __x from the input stream __is...
bernoulli_distribution(double __p=0.5)
Constructs a Bernoulli distribution with likelihood p.
result_type operator()()
Gets the next value in the generated random number sequence.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::piecewise_linear_distribution< _RealType1 > &__x)
Extracts a piecewise_linear_distribution random number distribution __x from the input stream __is...
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
friend bool operator==(const chi_squared_distribution &__d1, const chi_squared_distribution &__d2)
Return true if two Chi-squared distributions have the same parameters and the sequences that would be...
result_type max() const
Returns the least upper bound value of the distribution.
void reset()
Resets the distribution state.
friend bool operator==(const discrete_distribution &__d1, const discrete_distribution &__d2)
Return true if two discrete distributions have the same parameters.
A chi_squared_distribution random number distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
A normal continuous distribution for random numbers.
normal_distribution(result_type __mean=result_type(0), result_type __stddev=result_type(1))
_RealType mean() const
Returns the mean of the distribution.
static constexpr _Tp lowest() noexcept
void param(const param_type &__param)
Sets the parameter set of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::student_t_distribution< _RealType1 > &__x)
Extracts a student_t_distribution random number distribution __x from the input stream __is...
param_type param() const
Returns the parameter set of the distribution.
A lognormal_distribution random number distribution.
void reset()
Resets the distribution state.
void discard(unsigned long long __z)
Discard a sequence of random numbers.
result_type min() const
Returns the greatest lower bound value of the distribution.
void param(const param_type &__param)
Sets the parameter set of the distribution.
void discard(unsigned long long __z)
Discard a sequence of random numbers.
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type max() const
Returns the least upper bound value of the distribution.
mersenne_twister_engine(_Sseq &__q)
Constructs a mersenne_twister_engine random number generator engine seeded from the seed sequence __q...
linear_congruential_engine< uint_fast32_t, 48271UL, 0UL, 2147483647UL > minstd_rand
static constexpr result_type min()
void param(const param_type &__param)
Sets the parameter set of the distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
A gamma continuous distribution for random numbers.
friend bool operator==(const piecewise_linear_distribution &__d1, const piecewise_linear_distribution &__d2)
Return true if two piecewise linear distributions have the same parameters.
void seed(result_type __s)
Reseeds the independent_bits_engine object with the default seed for the underlying base class genera...
uniform_int_distribution(_IntType __a=0, _IntType __b=std::numeric_limits< _IntType >::max())
Constructs a uniform distribution object.
result_type min() const
Returns the inclusive lower bound of the distribution range.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
void param(const param_type &__param)
Sets the parameter set of the distribution.
result_type min() const
Returns the greatest lower bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
static constexpr result_type multiplier
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::discard_block_engine< _RandomNumberEngine1, __p1, __r1 > &__x)
Extracts the current state of a % subtract_with_carry_engine random number generator engine __x from ...
result_type max() const
Returns the least upper bound value of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
independent_bits_engine(_Sseq &__q)
Generator construct a independent_bits_engine engine.
void seed(_Sseq &__q)
Reseeds the shuffle_order_engine object with the given seed sequence.
friend bool operator==(const discard_block_engine &__lhs, const discard_block_engine &__rhs)
Compares two discard_block_engine random number generator objects of the same type for equality...
gamma_distribution(_RealType __alpha_val=_RealType(1), _RealType __beta_val=_RealType(1))
Constructs a gamma distribution with parameters and .
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
discard_block_engine(result_type __s)
Seed constructs a discard_block_engine engine.
_RealType generate_canonical(_UniformRandomNumberGenerator &__g)
A function template for converting the output of a (integral) uniform random number generator to a fl...
bitset< _Nb > operator>>(size_t __position) const noexcept
Self-explanatory.
static constexpr result_type min()
Gets the smallest possible value in the output range.
void reset()
Resets the distribution state.
result_type max() const
Returns the least upper bound value of the distribution.
param_type param() const
Returns the parameter set of the distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
std::vector< _RealType > intervals() const
Return the intervals of the distribution.
void seed(result_type __s)
Reseeds the discard_block_engine object with the default seed for the underlying base class generator...
void discard(unsigned long long __z)
void param(const param_type &__param)
Sets the parameter set of the distribution.
mersenne_twister_engine< uint_fast32_t, 32, 624, 397, 31, 0x9908b0dfUL, 11, 0xffffffffUL, 7, 0x9d2c5680UL, 15, 0xefc60000UL, 18, 1812433253UL > mt19937
result_type max() const
Returns the inclusive upper bound of the distribution range.
void reset()
Resets the distribution state.
void reset()
Resets the distribution state.
result_type max() const
Returns the least upper bound value of the distribution.
const _RandomNumberEngine & base() const noexcept
result_type min() const
Returns the greatest lower bound value of the distribution.
void reset()
Resets the distribution state.
_RealType alpha() const
Returns the of the distribution.
void reset()
Resets the distribution state.
result_type operator()()
Gets the next random number in the sequence.
friend bool operator==(const shuffle_order_engine &__lhs, const shuffle_order_engine &__rhs)
std::vector< double > densities() const
Returns a vector of the probability densities.
param_type param() const
Returns the parameter set of the distribution.
Uniform continuous distribution for random numbers.
Template class basic_ostream.
A model of a linear congruential random number generator.
static constexpr _Tp min() noexcept
double mean() const
Returns the distribution parameter mean.
friend bool operator==(const lognormal_distribution &__d1, const lognormal_distribution &__d2)
Return true if two lognormal distributions have the same parameters and the sequences that would be g...
param_type param() const
Returns the parameter set of the distribution.
param_type param() const
Returns the parameter set of the distribution.
Uniform discrete distribution for random numbers. A discrete random distribution on the range with e...
void seed()
Reseeds the independent_bits_engine object with the default seed for the underlying base class genera...
friend bool operator==(const weibull_distribution &__d1, const weibull_distribution &__d2)
Return true if two Weibull distributions have the same parameters.
mersenne_twister_engine< uint_fast64_t, 64, 312, 156, 31, 0xb5026f5aa96619e9ULL, 29, 0x5555555555555555ULL, 17, 0x71d67fffeda60000ULL, 37, 0xfff7eee000000000ULL, 43, 6364136223846793005ULL > mt19937_64
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
const _RandomNumberEngine & base() const noexcept
Gets a const reference to the underlying generator engine object.
linear_congruential_engine< uint_fast32_t, 16807UL, 0UL, 2147483647UL > minstd_rand0
void seed()
Reseeds the shuffle_order_engine object with the default seed for the underlying base class generator...
An exponential continuous distribution for random numbers.
result_type min() const
Returns the greatest lower bound value of the distribution.
result_type operator()()
Gets the next value in the generated random number sequence.
std::vector< double > densities() const
Return a vector of the probability densities of the distribution.
A piecewise_constant_distribution random number distribution.
friend bool operator==(const mersenne_twister_engine &__lhs, const mersenne_twister_engine &__rhs)
Compares two % mersenne_twister_engine random number generator objects of the same type for equality...
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::piecewise_constant_distribution< _RealType1 > &__x)
Extracts a piecewise_constant_distribution random number distribution __x from the input stream __is...
friend bool operator==(const geometric_distribution &__d1, const geometric_distribution &__d2)
Return true if two geometric distributions have the same parameters.
void seed()
Reseeds the discard_block_engine object with the default seed for the underlying base class generator...
void reset()
Resets the distribution state.
__gnu_cxx::__promote_2< _Tpx, _Tpy >::__type beta(_Tpx __x, _Tpy __y)
5.2.1.3 Beta functions.
double p() const
Returns the p parameter of the distribution.
friend bool operator==(const linear_congruential_engine &__lhs, const linear_congruential_engine &__rhs)
Compares two linear congruential random number generator objects of the same type for equality...
void seed(result_type __s)
Reseeds the shuffle_order_engine object with the default seed for the underlying base class generator...
_IntType k() const
Return the parameter of the distribution.
bool empty() const noexcept
A negative_binomial_distribution random number distribution.
result_type operator()(_UniformRandomNumberGenerator &__urng)
Generating functions.
void param(const param_type &__param)
Sets the parameter set of the distribution.
friend std::basic_istream< _CharT, _Traits > & operator>>(std::basic_istream< _CharT, _Traits > &__is, std::lognormal_distribution< _RealType1 > &__x)
Extracts a lognormal_distribution random number distribution __x from the input stream __is...
static constexpr result_type min()
Gets the smallest possible value in the output range.
static constexpr result_type min()
Gets the minimum value in the generated random number range.
friend bool operator==(const gamma_distribution &__d1, const gamma_distribution &__d2)
Return true if two gamma distributions have the same parameters and the sequences that would be gener...
param_type param() const
Returns the parameter set of the distribution.
void seed(result_type __s=default_seed)
Reseeds the linear_congruential_engine random number generator engine sequence to the seed __s...
shuffle_order_engine()
Constructs a default shuffle_order_engine engine.
One of the math functors.