67#pragma GCC diagnostic push
68#pragma GCC diagnostic ignored "-Wc++17-extensions"
70 template<
typename _UIntType,
size_t __w,
71 bool = __w < static_cast<size_t>
74 {
static constexpr _UIntType __value = 0; };
76 template<
typename _UIntType,
size_t __w>
77 struct _Shift<_UIntType, __w, true>
78 {
static constexpr _UIntType __value = _UIntType(1) << __w; };
81 int __which = ((__s <= __CHAR_BIT__ *
sizeof (int))
82 + (__s <= __CHAR_BIT__ *
sizeof (long))
83 + (__s <= __CHAR_BIT__ *
sizeof (
long long))
86 struct _Select_uint_least_t
88 static_assert(__which < 0,
89 "sorry, would be too much trouble for a slow result");
93 struct _Select_uint_least_t<__s, 4>
94 {
using type =
unsigned int; };
97 struct _Select_uint_least_t<__s, 3>
98 {
using type =
unsigned long; };
101 struct _Select_uint_least_t<__s, 2>
102 {
using type =
unsigned long long; };
104#if __SIZEOF_INT128__ > __SIZEOF_LONG_LONG__
106 struct _Select_uint_least_t<__s, 1>
107 { __extension__
using type =
unsigned __int128; };
108#elif __has_builtin(__builtin_add_overflow) \
109 && __has_builtin(__builtin_sub_overflow) \
110 && defined __UINT64_TYPE__
112 struct _Select_uint_least_t<__s, 1>
119 type(uint64_t __a) noexcept : _M_lo(__a), _M_hi(0) { }
123 operator*(type __l, uint64_t __x)
noexcept
129 constexpr uint64_t __mask = 0xffffffff;
130 uint64_t __ll[2] = { __l._M_lo >> 32, __l._M_lo & __mask };
131 uint64_t __xx[2] = { __x >> 32, __x & __mask };
132 uint64_t __l0x0 = __ll[0] * __xx[0];
133 uint64_t __l0x1 = __ll[0] * __xx[1];
134 uint64_t __l1x0 = __ll[1] * __xx[0];
135 uint64_t __l1x1 = __ll[1] * __xx[1];
139 = (__l0x1 & __mask) + (__l1x0 & __mask) + (__l1x1 >> 32);
140 __l._M_hi = __l0x0 + (__l0x1 >> 32) + (__l1x0 >> 32) + (__mid >> 32);
141 __l._M_lo = (__mid << 32) + (__l1x1 & __mask);
146 operator+(type __l, uint64_t __c)
noexcept
148 __l._M_hi += __builtin_add_overflow(__l._M_lo, __c, &__l._M_lo);
153 operator%(type __l, uint64_t __m)
noexcept
155 if (__builtin_expect(__l._M_hi == 0, 0))
161 int __shift = __builtin_clzll(__m) + 64
162 - __builtin_clzll(__l._M_hi);
166 __x._M_hi = __m << (__shift - 64);
171 __x._M_hi = __m >> (64 - __shift);
172 __x._M_lo = __m << __shift;
175 while (__l._M_hi != 0 || __l._M_lo >= __m)
179 __l._M_hi -= __x._M_hi;
180 __l._M_hi -= __builtin_sub_overflow(__l._M_lo, __x._M_lo,
183 __x._M_lo = (__x._M_lo >> 1) | (__x._M_hi << 63);
190 explicit operator uint64_t() const noexcept
193 friend bool operator<(
const type& __l,
const type& __r)
noexcept
195 if (__l._M_hi < __r._M_hi)
197 else if (__l._M_hi == __r._M_hi)
198 return __l._M_lo < __r._M_lo;
203 friend bool operator<=(
const type& __l,
const type& __r)
noexcept
204 {
return !(__r < __l); }
213 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c,
214 bool __big_enough = (!(__m & (__m - 1))
215 || (_Tp(-1) - __c) / __a >= __m - 1),
216 bool __schrage_ok = __m % __a < __m / __a>
223 =
typename _Select_uint_least_t<
std::__lg(__a)
225 return static_cast<_Tp
>((_Tp2(__a) * __x + __c) % __m);
230 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c>
231 struct _Mod<_Tp, __m, __a, __c, false, true>
240 template<
typename _Tp, _Tp __m, _Tp __a, _Tp __c,
bool __s>
241 struct _Mod<_Tp, __m, __a, __c, true, __s>
246 _Tp __res = __a * __x + __c;
253 template<
typename _Tp, _Tp __m, _Tp __a = 1, _Tp __c = 0>
257 if constexpr (__a == 0)
260 return _Mod<_Tp, __m, __a, __c>::__calc(__x);
267 template<
typename _Engine,
typename _DInputType>
270 static_assert(std::is_floating_point<_DInputType>::value,
271 "template argument must be a floating point type");
274 _Adaptor(_Engine& __g)
279 {
return _DInputType(0); }
283 {
return _DInputType(1); }
307 template<
typename _Sseq>
308 using __seed_seq_generate_t =
decltype(
312 template<
typename _Sseq,
typename _Engine,
typename _Res,
313 typename _GenerateCheck = __seed_seq_generate_t<_Sseq>>
314 using _If_seed_seq_for = _Require<
315 __not_<is_same<__remove_cvref_t<_Sseq>, _Engine>>,
316 is_unsigned<typename _Sseq::result_type>,
317 __not_<is_convertible<_Sseq, _Res>>
320#pragma GCC diagnostic pop
365 template<
typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
369 "result_type must be an unsigned integral type");
370 static_assert(__m == 0u || (__a < __m && __c < __m),
371 "template argument substituting __m out of bounds");
373 template<
typename _Sseq>
414 template<
typename _Sseq,
typename = _If_seed_seq<_Sseq>>
435 template<
typename _Sseq>
447 {
return __c == 0u ? 1u : 0u; }
460 discard(
unsigned long long __z)
462 for (; __z != 0ULL; --__z)
472 _M_x = __detail::__mod<_UIntType, __m, __a, __c>(_M_x);
490 {
return __lhs._M_x == __rhs._M_x; }
500 template<
typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
501 _UIntType1 __m1,
typename _CharT,
typename _Traits>
505 __a1, __c1, __m1>& __lcr);
520 template<
typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
521 _UIntType1 __m1,
typename _CharT,
typename _Traits>
531#if __cpp_impl_three_way_comparison < 201907L
543 template<
typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
549 {
return !(__lhs == __rhs); }
583 template<
typename _UIntType,
size_t __w,
584 size_t __n,
size_t __m,
size_t __r,
585 _UIntType __a,
size_t __u, _UIntType __d,
size_t __s,
586 _UIntType __b,
size_t __t,
587 _UIntType __c,
size_t __l, _UIntType __f>
588 class mersenne_twister_engine
591 "result_type must be an unsigned integral type");
592 static_assert(1u <= __m && __m <= __n,
593 "template argument substituting __m out of bounds");
594 static_assert(__r <= __w,
"template argument substituting "
596 static_assert(__u <= __w,
"template argument substituting "
598 static_assert(__s <= __w,
"template argument substituting "
600 static_assert(__t <= __w,
"template argument substituting "
602 static_assert(__l <= __w,
"template argument substituting "
604 static_assert(__w <= std::numeric_limits<_UIntType>::digits,
605 "template argument substituting __w out of bound");
606 static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1),
607 "template argument substituting __a out of bound");
608 static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1),
609 "template argument substituting __b out of bound");
610 static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1),
611 "template argument substituting __c out of bound");
612 static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1),
613 "template argument substituting __d out of bound");
614 static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1),
615 "template argument substituting __f out of bound");
617 template<
typename _Sseq>
619 = __detail::_If_seed_seq_for<_Sseq, mersenne_twister_engine,
627 static constexpr size_t word_size = __w;
628 static constexpr size_t state_size = __n;
629 static constexpr size_t shift_size = __m;
630 static constexpr size_t mask_bits = __r;
632 static constexpr size_t tempering_u = __u;
634 static constexpr size_t tempering_s = __s;
636 static constexpr size_t tempering_t = __t;
638 static constexpr size_t tempering_l = __l;
639 static constexpr result_type initialization_multiplier = __f;
644 mersenne_twister_engine() : mersenne_twister_engine(default_seed) { }
656 template<
typename _Sseq,
typename = _If_seed_seq<_Sseq>>
658 mersenne_twister_engine(_Sseq& __q)
662 seed(result_type __sd = default_seed);
664 template<
typename _Sseq>
680 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
686 discard(
unsigned long long __z);
704 operator==(
const mersenne_twister_engine& __lhs,
705 const mersenne_twister_engine& __rhs)
706 {
return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x)
707 && __lhs._M_p == __rhs._M_p); }
721 template<
typename _UIntType1,
722 size_t __w1,
size_t __n1,
723 size_t __m1,
size_t __r1,
724 _UIntType1 __a1,
size_t __u1,
725 _UIntType1 __d1,
size_t __s1,
726 _UIntType1 __b1,
size_t __t1,
727 _UIntType1 __c1,
size_t __l1, _UIntType1 __f1,
728 typename _CharT,
typename _Traits>
732 __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
747 template<
typename _UIntType1,
748 size_t __w1,
size_t __n1,
749 size_t __m1,
size_t __r1,
750 _UIntType1 __a1,
size_t __u1,
751 _UIntType1 __d1,
size_t __s1,
752 _UIntType1 __b1,
size_t __t1,
753 _UIntType1 __c1,
size_t __l1, _UIntType1 __f1,
754 typename _CharT,
typename _Traits>
758 __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
764 _UIntType _M_x[state_size];
768#if __cpp_impl_three_way_comparison < 201907L
781 template<
typename _UIntType,
size_t __w,
782 size_t __n,
size_t __m,
size_t __r,
783 _UIntType __a,
size_t __u, _UIntType __d,
size_t __s,
784 _UIntType __b,
size_t __t,
785 _UIntType __c,
size_t __l, _UIntType __f>
788 __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __lhs,
790 __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __rhs)
791 {
return !(__lhs == __rhs); }
812 template<
typename _UIntType,
size_t __w,
size_t __s,
size_t __r>
813 class subtract_with_carry_engine
816 "result_type must be an unsigned integral type");
817 static_assert(0u < __s && __s < __r,
819 static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits,
820 "template argument substituting __w out of bounds");
822 template<
typename _Sseq>
824 = __detail::_If_seed_seq_for<_Sseq, subtract_with_carry_engine,
832 static constexpr size_t word_size = __w;
833 static constexpr size_t short_lag = __s;
834 static constexpr size_t long_lag = __r;
835 static constexpr uint_least32_t default_seed = 19780503u;
837 subtract_with_carry_engine() : subtract_with_carry_engine(0u)
854 template<
typename _Sseq,
typename = _If_seed_seq<_Sseq>>
856 subtract_with_carry_engine(_Sseq& __q)
878 template<
typename _Sseq>
896 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
902 discard(
unsigned long long __z)
904 for (; __z != 0ULL; --__z)
927 operator==(
const subtract_with_carry_engine& __lhs,
928 const subtract_with_carry_engine& __rhs)
929 {
return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x)
930 && __lhs._M_carry == __rhs._M_carry
931 && __lhs._M_p == __rhs._M_p); }
945 template<
typename _UIntType1,
size_t __w1,
size_t __s1,
size_t __r1,
946 typename _CharT,
typename _Traits>
964 template<
typename _UIntType1,
size_t __w1,
size_t __s1,
size_t __r1,
965 typename _CharT,
typename _Traits>
973 _UIntType _M_x[long_lag];
978#if __cpp_impl_three_way_comparison < 201907L
991 template<
typename _UIntType,
size_t __w,
size_t __s,
size_t __r>
997 {
return !(__lhs == __rhs); }
1009 template<
typename _RandomNumberEngine,
size_t __p,
size_t __r>
1012 static_assert(1 <= __r && __r <= __p,
1013 "template argument substituting __r out of bounds");
1019 template<
typename _Sseq>
1025 static constexpr size_t block_size = __p;
1026 static constexpr size_t used_block = __r;
1034 : _M_b(), _M_n(0) { }
1044 : _M_b(__rng), _M_n(0) { }
1054 : _M_b(
std::
move(__rng)), _M_n(0) { }
1064 : _M_b(__s), _M_n(0) { }
1071 template<
typename _Sseq,
typename = _If_seed_seq<_Sseq>>
1074 : _M_b(__q), _M_n(0)
1104 template<
typename _Sseq>
1116 const _RandomNumberEngine&
1117 base() const noexcept
1125 {
return _RandomNumberEngine::min(); }
1132 {
return _RandomNumberEngine::max(); }
1138 discard(
unsigned long long __z)
1140 for (; __z != 0ULL; --__z)
1164 {
return __lhs._M_b == __rhs._M_b && __lhs._M_n == __rhs._M_n; }
1177 template<
typename _RandomNumberEngine1,
size_t __p1,
size_t __r1,
1178 typename _CharT,
typename _Traits>
1195 template<
typename _RandomNumberEngine1,
size_t __p1,
size_t __r1,
1196 typename _CharT,
typename _Traits>
1203 _RandomNumberEngine _M_b;
1207#if __cpp_impl_three_way_comparison < 201907L
1219 template<
typename _RandomNumberEngine,
size_t __p,
size_t __r>
1225 {
return !(__lhs == __rhs); }
1235 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType>
1239 "result_type must be an unsigned integral type");
1240 static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits,
1241 "template argument substituting __w out of bounds");
1243 template<
typename _Sseq>
1295 template<
typename _Sseq,
typename = _If_seed_seq<_Sseq>>
1322 template<
typename _Sseq>
1331 const _RandomNumberEngine&
1332 base() const noexcept
1347 {
return __detail::_Shift<_UIntType, __w>::__value - 1; }
1353 discard(
unsigned long long __z)
1355 for (; __z != 0ULL; --__z)
1380 {
return __lhs._M_b == __rhs._M_b; }
1394 template<
typename _CharT,
typename _Traits>
1398 __w, _UIntType>& __x)
1405 _RandomNumberEngine _M_b;
1408#if __cpp_impl_three_way_comparison < 201907L
1421 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType>
1427 {
return !(__lhs == __rhs); }
1440 template<
typename _RandomNumberEngine,
size_t __w,
typename _UIntType,
1441 typename _CharT,
typename _Traits>
1442 std::basic_ostream<_CharT, _Traits>&
1443 operator<<(std::basic_ostream<_CharT, _Traits>& __os,
1444 const std::independent_bits_engine<_RandomNumberEngine,
1445 __w, _UIntType>& __x)
1884 "result_type must be a floating point type");
1895 param_type() : param_type(0) { }
1898 param_type(_RealType __a, _RealType __b = _RealType(1))
1899 : _M_a(__a), _M_b(__b)
1901 __glibcxx_assert(_M_a <= _M_b);
1913 operator==(
const param_type& __p1,
const param_type& __p2)
1914 {
return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
1916#if __cpp_impl_three_way_comparison < 201907L
1918 operator!=(
const param_type& __p1,
const param_type& __p2)
1919 {
return !(__p1 == __p2); }
1943 : _M_param(__a, __b)
1961 {
return _M_param.a(); }
1965 {
return _M_param.b(); }
1972 {
return _M_param; }
1980 { _M_param = __param; }
1987 {
return this->a(); }
1994 {
return this->b(); }
1999 template<
typename _UniformRandomNumberGenerator>
2002 {
return this->
operator()(__urng, _M_param); }
2004 template<
typename _UniformRandomNumberGenerator>
2006 operator()(_UniformRandomNumberGenerator& __urng,
2007 const param_type& __p)
2009 __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
2011 return (__aurng() * (__p.b() - __p.a())) + __p.a();
2014 template<
typename _ForwardIterator,
2015 typename _UniformRandomNumberGenerator>
2017 __generate(_ForwardIterator __f, _ForwardIterator __t,
2018 _UniformRandomNumberGenerator& __urng)
2019 { this->__generate(__f, __t, __urng, _M_param); }
2021 template<
typename _ForwardIterator,
2022 typename _UniformRandomNumberGenerator>
2024 __generate(_ForwardIterator __f, _ForwardIterator __t,
2025 _UniformRandomNumberGenerator& __urng,
2027 { this->__generate_impl(__f, __t, __urng, __p); }
2029 template<
typename _UniformRandomNumberGenerator>
2032 _UniformRandomNumberGenerator& __urng,
2034 { this->__generate_impl(__f, __t, __urng, __p); }
2043 {
return __d1._M_param == __d2._M_param; }
2046 template<
typename _ForwardIterator,
2047 typename _UniformRandomNumberGenerator>
2049 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2050 _UniformRandomNumberGenerator& __urng,
2051 const param_type& __p);
2053 param_type _M_param;
2118 class normal_distribution
2121 "result_type must be a floating point type");
2130 typedef normal_distribution<_RealType> distribution_type;
2132 param_type() : param_type(0.0) { }
2135 param_type(_RealType __mean, _RealType __stddev = _RealType(1))
2136 : _M_mean(__mean), _M_stddev(__stddev)
2138 __glibcxx_assert(_M_stddev > _RealType(0));
2147 {
return _M_stddev; }
2150 operator==(
const param_type& __p1,
const param_type& __p2)
2151 {
return (__p1._M_mean == __p2._M_mean
2152 && __p1._M_stddev == __p2._M_stddev); }
2154#if __cpp_impl_three_way_comparison < 201907L
2156 operator!=(
const param_type& __p1,
const param_type& __p2)
2157 {
return !(__p1 == __p2); }
2162 _RealType _M_stddev;
2166 normal_distribution() : normal_distribution(0.0) { }
2175 : _M_param(__mean, __stddev)
2188 { _M_saved_available =
false; }
2195 {
return _M_param.mean(); }
2202 {
return _M_param.stddev(); }
2209 {
return _M_param; }
2217 { _M_param = __param; }
2236 template<
typename _UniformRandomNumberGenerator>
2239 {
return this->
operator()(__urng, _M_param); }
2241 template<
typename _UniformRandomNumberGenerator>
2244 const param_type& __p);
2246 template<
typename _ForwardIterator,
2247 typename _UniformRandomNumberGenerator>
2249 __generate(_ForwardIterator __f, _ForwardIterator __t,
2250 _UniformRandomNumberGenerator& __urng)
2251 { this->__generate(__f, __t, __urng, _M_param); }
2253 template<
typename _ForwardIterator,
2254 typename _UniformRandomNumberGenerator>
2256 __generate(_ForwardIterator __f, _ForwardIterator __t,
2257 _UniformRandomNumberGenerator& __urng,
2258 const param_type& __p)
2259 { this->__generate_impl(__f, __t, __urng, __p); }
2261 template<
typename _UniformRandomNumberGenerator>
2263 __generate(result_type* __f, result_type* __t,
2264 _UniformRandomNumberGenerator& __urng,
2265 const param_type& __p)
2266 { this->__generate_impl(__f, __t, __urng, __p); }
2273 template<
typename _RealType1>
2288 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2303 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2309 template<
typename _ForwardIterator,
2310 typename _UniformRandomNumberGenerator>
2312 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2313 _UniformRandomNumberGenerator& __urng,
2314 const param_type& __p);
2316 param_type _M_param;
2318 bool _M_saved_available =
false;
2345 class lognormal_distribution
2348 "result_type must be a floating point type");
2357 typedef lognormal_distribution<_RealType> distribution_type;
2359 param_type() : param_type(0.0) { }
2362 param_type(_RealType __m, _RealType __s = _RealType(1))
2363 : _M_m(__m), _M_s(__s)
2375 operator==(
const param_type& __p1,
const param_type& __p2)
2376 {
return __p1._M_m == __p2._M_m && __p1._M_s == __p2._M_s; }
2378#if __cpp_impl_three_way_comparison < 201907L
2380 operator!=(
const param_type& __p1,
const param_type& __p2)
2381 {
return !(__p1 == __p2); }
2389 lognormal_distribution() : lognormal_distribution(0.0) { }
2393 : _M_param(__m, __s), _M_nd()
2397 lognormal_distribution(
const param_type& __p)
2398 : _M_param(__p), _M_nd()
2413 {
return _M_param.m(); }
2417 {
return _M_param.s(); }
2424 {
return _M_param; }
2432 { _M_param = __param; }
2451 template<
typename _UniformRandomNumberGenerator>
2454 {
return this->
operator()(__urng, _M_param); }
2456 template<
typename _UniformRandomNumberGenerator>
2458 operator()(_UniformRandomNumberGenerator& __urng,
2459 const param_type& __p)
2460 {
return std::exp(__p.s() * _M_nd(__urng) + __p.m()); }
2462 template<
typename _ForwardIterator,
2463 typename _UniformRandomNumberGenerator>
2465 __generate(_ForwardIterator __f, _ForwardIterator __t,
2466 _UniformRandomNumberGenerator& __urng)
2467 { this->__generate(__f, __t, __urng, _M_param); }
2469 template<
typename _ForwardIterator,
2470 typename _UniformRandomNumberGenerator>
2472 __generate(_ForwardIterator __f, _ForwardIterator __t,
2473 _UniformRandomNumberGenerator& __urng,
2475 { this->__generate_impl(__f, __t, __urng, __p); }
2477 template<
typename _UniformRandomNumberGenerator>
2480 _UniformRandomNumberGenerator& __urng,
2482 { this->__generate_impl(__f, __t, __urng, __p); }
2491 const lognormal_distribution& __d2)
2492 {
return (__d1._M_param == __d2._M_param
2493 && __d1._M_nd == __d2._M_nd); }
2505 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2520 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2526 template<
typename _ForwardIterator,
2527 typename _UniformRandomNumberGenerator>
2529 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2530 _UniformRandomNumberGenerator& __urng,
2531 const param_type& __p);
2533 param_type _M_param;
2573 "result_type must be a floating point type");
2585 param_type() : param_type(1.0) { }
2588 param_type(_RealType __alpha_val, _RealType __beta_val = _RealType(1))
2589 : _M_alpha(__alpha_val), _M_beta(__beta_val)
2591 __glibcxx_assert(_M_alpha > _RealType(0));
2597 {
return _M_alpha; }
2604 operator==(
const param_type& __p1,
const param_type& __p2)
2605 {
return (__p1._M_alpha == __p2._M_alpha
2606 && __p1._M_beta == __p2._M_beta); }
2608#if __cpp_impl_three_way_comparison < 201907L
2610 operator!=(
const param_type& __p1,
const param_type& __p2)
2611 {
return !(__p1 == __p2); }
2621 _RealType _M_malpha, _M_a2;
2636 _RealType __beta_val = _RealType(1))
2637 : _M_param(__alpha_val, __beta_val), _M_nd()
2642 : _M_param(__p), _M_nd()
2657 {
return _M_param.alpha(); }
2664 {
return _M_param.beta(); }
2671 {
return _M_param; }
2679 { _M_param = __param; }
2698 template<
typename _UniformRandomNumberGenerator>
2701 {
return this->
operator()(__urng, _M_param); }
2703 template<
typename _UniformRandomNumberGenerator>
2706 const param_type& __p);
2708 template<
typename _ForwardIterator,
2709 typename _UniformRandomNumberGenerator>
2711 __generate(_ForwardIterator __f, _ForwardIterator __t,
2712 _UniformRandomNumberGenerator& __urng)
2713 { this->__generate(__f, __t, __urng, _M_param); }
2715 template<
typename _ForwardIterator,
2716 typename _UniformRandomNumberGenerator>
2718 __generate(_ForwardIterator __f, _ForwardIterator __t,
2719 _UniformRandomNumberGenerator& __urng,
2720 const param_type& __p)
2721 { this->__generate_impl(__f, __t, __urng, __p); }
2723 template<
typename _UniformRandomNumberGenerator>
2725 __generate(result_type* __f, result_type* __t,
2726 _UniformRandomNumberGenerator& __urng,
2727 const param_type& __p)
2728 { this->__generate_impl(__f, __t, __urng, __p); }
2738 {
return (__d1._M_param == __d2._M_param
2739 && __d1._M_nd == __d2._M_nd); }
2751 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2765 template<
typename _RealType1,
typename _CharT,
typename _Traits>
2771 template<
typename _ForwardIterator,
2772 typename _UniformRandomNumberGenerator>
2774 __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
2775 _UniformRandomNumberGenerator& __urng,
2776 const param_type& __p);
2778 param_type _M_param;