1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // class bernoulli_distribution
14 // template<class _URNG> result_type operator()(_URNG& g, const param_type& parm);
33 typedef std::bernoulli_distribution D;
34 typedef D::param_type P;
35 typedef std::minstd_rand G;
40 std::vector<D::result_type> u;
41 for (int i = 0; i < N; ++i)
43 double mean = std::accumulate(u.begin(), u.end(),
44 double(0)) / u.size();
48 for (std::size_t i = 0; i < u.size(); ++i)
50 double dbl = (u[i] - mean);
57 double dev = std::sqrt(var);
58 skew /= u.size() * dev * var;
59 kurtosis /= u.size() * var * var;
61 double x_mean = p.p();
62 double x_var = p.p()*(1-p.p());
63 double x_skew = (1 - 2 * p.p())/std::sqrt(x_var);
64 double x_kurtosis = (6 * sqr(p.p()) - 6 * p.p() + 1)/x_var;
65 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
66 assert(std::abs((var - x_var) / x_var) < 0.01);
67 assert(std::abs((skew - x_skew) / x_skew) < 0.01);
68 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
71 typedef std::bernoulli_distribution D;
72 typedef D::param_type P;
73 typedef std::minstd_rand G;
78 std::vector<D::result_type> u;
79 for (int i = 0; i < N; ++i)
81 double mean = std::accumulate(u.begin(), u.end(),
82 double(0)) / u.size();
86 for (std::size_t i = 0; i < u.size(); ++i)
88 double dbl = (u[i] - mean);
95 double dev = std::sqrt(var);
96 skew /= u.size() * dev * var;
97 kurtosis /= u.size() * var * var;
99 double x_mean = p.p();
100 double x_var = p.p()*(1-p.p());
101 double x_skew = (1 - 2 * p.p())/std::sqrt(x_var);
102 double x_kurtosis = (6 * sqr(p.p()) - 6 * p.p() + 1)/x_var;
103 assert(std::abs((mean - x_mean) / x_mean) < 0.01);
104 assert(std::abs((var - x_var) / x_var) < 0.01);
105 assert(std::abs((skew - x_skew) / x_skew) < 0.01);
106 assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);