1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <random>
11
12 // template<class RealType = double>
13 // class cauchy_distribution
14
15 // template<class _URNG> result_type operator()(_URNG& g, const param_type& parm);
16
17 #include <random>
18 #include <cassert>
19 #include <vector>
20 #include <algorithm>
21
22 double
f(double x,double a,double b)23 f(double x, double a, double b)
24 {
25 return 1/3.1415926535897932 * std::atan((x - a)/b) + .5;
26 }
27
main()28 int main()
29 {
30 {
31 typedef std::cauchy_distribution<> D;
32 typedef D::param_type P;
33 typedef std::mt19937 G;
34 G g;
35 const double a = 10;
36 const double b = .5;
37 D d;
38 P p(a, b);
39 const int N = 1000000;
40 std::vector<D::result_type> u;
41 for (int i = 0; i < N; ++i)
42 u.push_back(d(g, p));
43 std::sort(u.begin(), u.end());
44 for (int i = 0; i < N; ++i)
45 assert(std::abs(f(u[i], a, b) - double(i)/N) < .001);
46 }
47 {
48 typedef std::cauchy_distribution<> D;
49 typedef D::param_type P;
50 typedef std::mt19937 G;
51 G g;
52 const double a = -1.5;
53 const double b = 1;
54 D d;
55 P p(a, b);
56 const int N = 1000000;
57 std::vector<D::result_type> u;
58 for (int i = 0; i < N; ++i)
59 u.push_back(d(g, p));
60 std::sort(u.begin(), u.end());
61 for (int i = 0; i < N; ++i)
62 assert(std::abs(f(u[i], a, b) - double(i)/N) < .001);
63 }
64 {
65 typedef std::cauchy_distribution<> D;
66 typedef D::param_type P;
67 typedef std::mt19937 G;
68 G g;
69 const double a = .5;
70 const double b = 2;
71 D d;
72 P p(a, b);
73 const int N = 1000000;
74 std::vector<D::result_type> u;
75 for (int i = 0; i < N; ++i)
76 u.push_back(d(g, p));
77 std::sort(u.begin(), u.end());
78 for (int i = 0; i < N; ++i)
79 assert(std::abs(f(u[i], a, b) - double(i)/N) < .001);
80 }
81 }
82