1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 // template<class RealType = double>
12 // class uniform_real_distribution
14 // template<class _URNG> result_type operator()(_URNG& g, const param_type& parm);
22 #include "test_macros.h"
35 typedef std::uniform_real_distribution
<> D
;
36 typedef std::minstd_rand G
;
37 typedef D::param_type P
;
42 std::vector
<D::result_type
> u
;
43 for (int i
= 0; i
< N
; ++i
)
45 D::result_type v
= d(g
, p
);
46 assert(p
.a() <= v
&& v
< p
.b());
49 D::result_type mean
= std::accumulate(u
.begin(), u
.end(),
50 D::result_type(0)) / u
.size();
51 D::result_type var
= 0;
52 D::result_type skew
= 0;
53 D::result_type kurtosis
= 0;
54 for (std::size_t i
= 0; i
< u
.size(); ++i
)
56 D::result_type dbl
= (u
[i
] - mean
);
57 D::result_type d2
= sqr(dbl
);
63 D::result_type dev
= std::sqrt(var
);
64 skew
/= u
.size() * dev
* var
;
65 kurtosis
/= u
.size() * var
* var
;
67 D::result_type x_mean
= (p
.a() + p
.b()) / 2;
68 D::result_type x_var
= sqr(p
.b() - p
.a()) / 12;
69 D::result_type x_skew
= 0;
70 D::result_type x_kurtosis
= -6./5;
71 assert(std::abs((mean
- x_mean
) / x_mean
) < 0.01);
72 assert(std::abs((var
- x_var
) / x_var
) < 0.01);
73 assert(std::abs(skew
- x_skew
) < 0.01);
74 assert(std::abs((kurtosis
- x_kurtosis
) / x_kurtosis
) < 0.01);