summaryrefslogtreecommitdiff
path: root/test/std/numerics/rand
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/numerics/rand')
-rw-r--r--test/std/numerics/rand/rand.device/ctor.pass.cpp43
-rw-r--r--test/std/numerics/rand/rand.device/eval.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp12
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp12
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp880
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp482
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp478
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp422
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp431
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp314
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp322
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp18
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp1235
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp7
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp583
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp10
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp60
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp66
-rw-r--r--test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp6
-rw-r--r--test/std/numerics/rand/rand.synopsis/version.pass.cpp20
37 files changed, 2947 insertions, 2718 deletions
diff --git a/test/std/numerics/rand/rand.device/ctor.pass.cpp b/test/std/numerics/rand/rand.device/ctor.pass.cpp
index dfeccc81e30e..8c45bb19a0a6 100644
--- a/test/std/numerics/rand/rand.device/ctor.pass.cpp
+++ b/test/std/numerics/rand/rand.device/ctor.pass.cpp
@@ -22,7 +22,13 @@
#include <random>
#include <system_error>
#include <cassert>
+
+#if !defined(_WIN32)
#include <unistd.h>
+#endif
+
+#include "test_macros.h"
+
bool is_valid_random_device(const std::string &token) {
#if defined(_LIBCPP_USING_DEV_RANDOM)
@@ -40,33 +46,20 @@ void check_random_device_valid(const std::string &token) {
void check_random_device_invalid(const std::string &token) {
try {
std::random_device r(token);
- assert(false);
- } catch (const std::system_error &e) {
+ LIBCPP_ASSERT(false);
+ } catch (const std::system_error&) {
}
}
-int main() {
- { std::random_device r; }
+int main() {
{
- int ec;
- ec = close(STDIN_FILENO);
- assert(!ec);
- ec = close(STDOUT_FILENO);
- assert(!ec);
- ec = close(STDERR_FILENO);
- assert(!ec);
std::random_device r;
}
-
{
std::string token = "wrong file";
- if (is_valid_random_device(token))
- check_random_device_valid(token);
- else
- check_random_device_invalid(token);
+ check_random_device_invalid(token);
}
-
{
std::string token = "/dev/urandom";
if (is_valid_random_device(token))
@@ -74,7 +67,6 @@ int main() {
else
check_random_device_invalid(token);
}
-
{
std::string token = "/dev/random";
if (is_valid_random_device(token))
@@ -82,4 +74,19 @@ int main() {
else
check_random_device_invalid(token);
}
+#if !defined(_WIN32)
+// Test that random_device(const string&) properly handles getting
+// a file descriptor with the value '0'. Do this by closing the standard
+// streams so that the descriptor '0' is available.
+ {
+ int ec;
+ ec = close(STDIN_FILENO);
+ assert(!ec);
+ ec = close(STDOUT_FILENO);
+ assert(!ec);
+ ec = close(STDERR_FILENO);
+ assert(!ec);
+ std::random_device r;
+ }
+#endif // !defined(_WIN32)
}
diff --git a/test/std/numerics/rand/rand.device/eval.pass.cpp b/test/std/numerics/rand/rand.device/eval.pass.cpp
index ed5361fbde75..eabcc201e068 100644
--- a/test/std/numerics/rand/rand.device/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.device/eval.pass.cpp
@@ -17,6 +17,8 @@
#include <random>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -28,9 +30,9 @@ int main()
{
std::random_device r("/dev/null");
r();
- assert(false);
+ LIBCPP_ASSERT(false);
}
- catch (const std::system_error& e)
+ catch (const std::system_error&)
{
}
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp
index f071e8507478..b267c2477e91 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp
@@ -44,10 +44,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -80,10 +80,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp
index e03fb57f380c..f96df82304f0 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp
@@ -46,10 +46,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -84,10 +84,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
index 43c6b546bdb2..88004ba4a741 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
@@ -29,447 +29,491 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ D d(5, .75);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- D d(5, .75);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
- double x_skew = (1-2*d.p()) / std::sqrt(x_var);
- double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.04);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(30, .03125);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
- double x_skew = (1-2*d.p()) / std::sqrt(x_var);
- double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+ double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+ double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.04);
+}
+
+void
+test2()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(30, .03125);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(40, .25);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
- double x_skew = (1-2*d.p()) / std::sqrt(x_var);
- double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.03);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.3);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(40, 0);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- // In this case:
- // skew computes to 0./0. == nan
- // kurtosis computes to 0./0. == nan
- // x_skew == inf
- // x_kurtosis == inf
- // These tests are commented out because UBSan warns about division by 0
-// skew /= u.size() * dev * var;
-// kurtosis /= u.size() * var * var;
-// kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
-// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
-// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(mean == x_mean);
- assert(var == x_var);
-// assert(skew == x_skew);
-// assert(kurtosis == x_kurtosis);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+ double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+ double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test3()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(40, .25);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(40, 1);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- // In this case:
- // skew computes to 0./0. == nan
- // kurtosis computes to 0./0. == nan
- // x_skew == -inf
- // x_kurtosis == inf
- // These tests are commented out because UBSan warns about division by 0
-// skew /= u.size() * dev * var;
-// kurtosis /= u.size() * var * var;
-// kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
-// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
-// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(mean == x_mean);
- assert(var == x_var);
-// assert(skew == x_skew);
-// assert(kurtosis == x_kurtosis);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(400, 0.5);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
- double x_skew = (1-2*d.p()) / std::sqrt(x_var);
- double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs(kurtosis - x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+ double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+ double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.03);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.3);
+}
+
+void
+test4()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(40, 0);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(1, 0.5);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
- double x_skew = (1-2*d.p()) / std::sqrt(x_var);
- double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- const int N = 100000;
- std::mt19937 gen1;
- std::mt19937 gen2;
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ // In this case:
+ // skew computes to 0./0. == nan
+ // kurtosis computes to 0./0. == nan
+ // x_skew == inf
+ // x_kurtosis == inf
+ // These tests are commented out because UBSan warns about division by 0
+// skew /= u.size() * dev * var;
+// kurtosis /= u.size() * var * var;
+// kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(mean == x_mean);
+ assert(var == x_var);
+// assert(skew == x_skew);
+// assert(kurtosis == x_kurtosis);
+}
- std::binomial_distribution<> dist1(5, 0.1);
- std::binomial_distribution<unsigned> dist2(5, 0.1);
+void
+test5()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(40, 1);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ // In this case:
+ // skew computes to 0./0. == nan
+ // kurtosis computes to 0./0. == nan
+ // x_skew == -inf
+ // x_kurtosis == inf
+ // These tests are commented out because UBSan warns about division by 0
+// skew /= u.size() * dev * var;
+// kurtosis /= u.size() * var * var;
+// kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(mean == x_mean);
+ assert(var == x_var);
+// assert(skew == x_skew);
+// assert(kurtosis == x_kurtosis);
+}
- for(int i = 0; i < N; ++i)
- assert(dist1(gen1) == dist2(gen2));
+void
+test6()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(400, 0.5);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0, 0.005);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- // In this case:
- // skew computes to 0./0. == nan
- // kurtosis computes to 0./0. == nan
- // x_skew == inf
- // x_kurtosis == inf
- // These tests are commented out because UBSan warns about division by 0
-// skew /= u.size() * dev * var;
-// kurtosis /= u.size() * var * var;
-// kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
-// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
-// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(mean == x_mean);
- assert(var == x_var);
-// assert(skew == x_skew);
-// assert(kurtosis == x_kurtosis);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+ double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+ double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs(kurtosis - x_kurtosis) < 0.01);
+}
+
+void
+test7()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(1, 0.5);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0, 0);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- // In this case:
- // skew computes to 0./0. == nan
- // kurtosis computes to 0./0. == nan
- // x_skew == inf
- // x_kurtosis == inf
- // These tests are commented out because UBSan warns about division by 0
-// skew /= u.size() * dev * var;
-// kurtosis /= u.size() * var * var;
-// kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
-// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
-// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(mean == x_mean);
- assert(var == x_var);
-// assert(skew == x_skew);
-// assert(kurtosis == x_kurtosis);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0, 1);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- // In this case:
- // skew computes to 0./0. == nan
- // kurtosis computes to 0./0. == nan
- // x_skew == -inf
- // x_kurtosis == inf
- // These tests are commented out because UBSan warns about division by 0
-// skew /= u.size() * dev * var;
-// kurtosis /= u.size() * var * var;
-// kurtosis -= 3;
- double x_mean = d.t() * d.p();
- double x_var = x_mean*(1-d.p());
-// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
-// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
- assert(mean == x_mean);
- assert(var == x_var);
-// assert(skew == x_skew);
-// assert(kurtosis == x_kurtosis);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+ double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+ double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test8()
+{
+ const int N = 100000;
+ std::mt19937 gen1;
+ std::mt19937 gen2;
+
+ std::binomial_distribution<> dist1(5, 0.1);
+ std::binomial_distribution<unsigned> dist2(5, 0.1);
+
+ for(int i = 0; i < N; ++i)
+ assert(dist1(gen1) == dist2(gen2));
+}
+
+void
+test9()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0, 0.005);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ // In this case:
+ // skew computes to 0./0. == nan
+ // kurtosis computes to 0./0. == nan
+ // x_skew == inf
+ // x_kurtosis == inf
+ // These tests are commented out because UBSan warns about division by 0
+// skew /= u.size() * dev * var;
+// kurtosis /= u.size() * var * var;
+// kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(mean == x_mean);
+ assert(var == x_var);
+// assert(skew == x_skew);
+// assert(kurtosis == x_kurtosis);
+}
+
+void
+test10()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0, 0);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ // In this case:
+ // skew computes to 0./0. == nan
+ // kurtosis computes to 0./0. == nan
+ // x_skew == inf
+ // x_kurtosis == inf
+ // These tests are commented out because UBSan warns about division by 0
+// skew /= u.size() * dev * var;
+// kurtosis /= u.size() * var * var;
+// kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(mean == x_mean);
+ assert(var == x_var);
+// assert(skew == x_skew);
+// assert(kurtosis == x_kurtosis);
+}
+
+void
+test11()
+{
+ typedef std::binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0, 1);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ // In this case:
+ // skew computes to 0./0. == nan
+ // kurtosis computes to 0./0. == nan
+ // x_skew == -inf
+ // x_kurtosis == inf
+ // These tests are commented out because UBSan warns about division by 0
+// skew /= u.size() * dev * var;
+// kurtosis /= u.size() * var * var;
+// kurtosis -= 3;
+ double x_mean = d.t() * d.p();
+ double x_var = x_mean*(1-d.p());
+// double x_skew = (1-2*d.p()) / std::sqrt(x_var);
+// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var;
+ assert(mean == x_mean);
+ assert(var == x_var);
+// assert(skew == x_skew);
+// assert(kurtosis == x_kurtosis);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+ test7();
+ test8();
+ test9();
+ test10();
+ test11();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp
index 1aa66ed57ad1..092a69778513 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp
@@ -53,10 +53,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -95,10 +95,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -137,10 +137,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
index a8ef221e3b67..4e9f9d3c044d 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
@@ -29,246 +29,270 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
+{
+ typedef std::geometric_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(.03125);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test2()
+{
+ typedef std::geometric_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0.05);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+}
+
+void
+test3()
+{
+ typedef std::geometric_distribution<> D;
+ typedef std::minstd_rand G;
+ G g;
+ D d(.25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+}
+
+void
+test4()
{
+ typedef std::geometric_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0.5);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(.03125);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0.05);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+}
+
+void
+test5()
+{
+ typedef std::geometric_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0.75);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::minstd_rand G;
- G g;
- D d(.25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0.5);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+}
+
+void
+test6()
+{
+ typedef std::geometric_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(0.96875);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0.75);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::geometric_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(0.96875);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
- double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt((1 - d.p()));
+ double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p());
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp
index 91dea8aa1337..c451f0130904 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp
@@ -53,10 +53,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -95,10 +95,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -137,10 +137,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp
index 853161e9f9b7..929e6e7e6c3b 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp
@@ -29,244 +29,268 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
+{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::minstd_rand G;
+ G g;
+ D d(5, .25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+}
+
+void
+test2()
+{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(30, .03125);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test3()
+{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(40, .25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+}
+
+void
+test4()
{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(40, 1);
+ const int N = 1000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::minstd_rand G;
- G g;
- D d(5, .25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(30, .03125);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(mean == x_mean);
+ assert(var == x_var);
+}
+
+void
+test5()
+{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(400, 0.5);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(40, .25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(40, 1);
- const int N = 1000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(mean == x_mean);
- assert(var == x_var);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.04);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+}
+
+void
+test6()
+{
+ typedef std::negative_binomial_distribution<> D;
+ typedef std::mt19937 G;
+ G g;
+ D d(1, 0.05);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(400, 0.5);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.04);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+ D::result_type v = d(g);
+ assert(d.min() <= v && v <= d.max());
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(),
+ double(0)) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::negative_binomial_distribution<> D;
- typedef std::mt19937 G;
- G g;
- D d(1, 0.05);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v <= d.max());
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(),
- double(0)) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.k() * (1 - d.p()) / d.p();
- double x_var = x_mean / d.p();
- double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
- double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.k() * (1 - d.p()) / d.p();
+ double x_var = x_mean / d.p();
+ double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p()));
+ double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p()));
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp
index f2f2a07879e2..2710061a1a05 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp
@@ -53,10 +53,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -95,10 +95,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -137,10 +137,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp
index 6fbdd93f8ffd..f6bc3c73993c 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -91,10 +91,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -131,10 +131,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp
index 548848d19f3e..fd52a0488979 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp
@@ -52,10 +52,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -93,10 +93,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -134,10 +134,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp
index 9b111cced8a8..2ad6784cd878 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp
@@ -29,216 +29,236 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-1./8192, 0.015625);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(v > 0);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(d.m() + sqr(d.s())/2);
+ double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
+ double x_skew = (std::exp(sqr(d.s())) + 2) *
+ std::sqrt((std::exp(sqr(d.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
+ 3*std::exp(2*sqr(d.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.05);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25);
+}
+
+void
+test2()
{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-1./32, 0.25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-1./8192, 0.015625);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(d.m() + sqr(d.s())/2);
- double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
- double x_skew = (std::exp(sqr(d.s())) + 2) *
- std::sqrt((std::exp(sqr(d.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
- 3*std::exp(2*sqr(d.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.05);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25);
+ D::result_type v = d(g);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-1./32, 0.25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(d.m() + sqr(d.s())/2);
- double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
- double x_skew = (std::exp(sqr(d.s())) + 2) *
- std::sqrt((std::exp(sqr(d.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
- 3*std::exp(2*sqr(d.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(d.m() + sqr(d.s())/2);
+ double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
+ double x_skew = (std::exp(sqr(d.s())) + 2) *
+ std::sqrt((std::exp(sqr(d.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
+ 3*std::exp(2*sqr(d.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+}
+
+void
+test3()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-1./8, 0.5);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-1./8, 0.5);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(d.m() + sqr(d.s())/2);
- double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
- double x_skew = (std::exp(sqr(d.s())) + 2) *
- std::sqrt((std::exp(sqr(d.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
- 3*std::exp(2*sqr(d.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.02);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+ D::result_type v = d(g);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d;
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(d.m() + sqr(d.s())/2);
- double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
- double x_skew = (std::exp(sqr(d.s())) + 2) *
- std::sqrt((std::exp(sqr(d.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
- 3*std::exp(2*sqr(d.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.02);
- assert(std::abs((skew - x_skew) / x_skew) < 0.08);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(d.m() + sqr(d.s())/2);
+ double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
+ double x_skew = (std::exp(sqr(d.s())) + 2) *
+ std::sqrt((std::exp(sqr(d.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
+ 3*std::exp(2*sqr(d.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.02);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+}
+
+void
+test4()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d;
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-0.78125, 1.25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(d.m() + sqr(d.s())/2);
- double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
- double x_skew = (std::exp(sqr(d.s())) + 2) *
- std::sqrt((std::exp(sqr(d.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
- 3*std::exp(2*sqr(d.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.04);
- assert(std::abs((skew - x_skew) / x_skew) < 0.2);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7);
+ D::result_type v = d(g);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(d.m() + sqr(d.s())/2);
+ double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
+ double x_skew = (std::exp(sqr(d.s())) + 2) *
+ std::sqrt((std::exp(sqr(d.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
+ 3*std::exp(2*sqr(d.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.02);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.08);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4);
+}
+
+void
+test5()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-0.78125, 1.25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(v > 0);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(d.m() + sqr(d.s())/2);
+ double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s()));
+ double x_skew = (std::exp(sqr(d.s())) + 2) *
+ std::sqrt((std::exp(sqr(d.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) +
+ 3*std::exp(2*sqr(d.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.04);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.2);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp
index 283403ea1a0d..8f397fcab096 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp
@@ -29,222 +29,241 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d;
+ P p(-1./8192, 0.015625);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g, p);
+ assert(v > 0);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(p.m() + sqr(p.s())/2);
+ double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
+ double x_skew = (std::exp(sqr(p.s())) + 2) *
+ std::sqrt((std::exp(sqr(p.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
+ 3*std::exp(2*sqr(p.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.05);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25);
+}
+
+void
+test2()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d;
+ P p(-1./32, 0.25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g, p);
+ assert(v > 0);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(p.m() + sqr(p.s())/2);
+ double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
+ double x_skew = (std::exp(sqr(p.s())) + 2) *
+ std::sqrt((std::exp(sqr(p.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
+ 3*std::exp(2*sqr(p.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+}
+void
+test3()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d;
+ P p(-1./8, 0.5);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d;
- P p(-1./8192, 0.015625);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(p.m() + sqr(p.s())/2);
- double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
- double x_skew = (std::exp(sqr(p.s())) + 2) *
- std::sqrt((std::exp(sqr(p.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
- 3*std::exp(2*sqr(p.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.05);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25);
+ D::result_type v = d(g, p);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d;
- P p(-1./32, 0.25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(p.m() + sqr(p.s())/2);
- double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
- double x_skew = (std::exp(sqr(p.s())) + 2) *
- std::sqrt((std::exp(sqr(p.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
- 3*std::exp(2*sqr(p.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(p.m() + sqr(p.s())/2);
+ double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
+ double x_skew = (std::exp(sqr(p.s())) + 2) *
+ std::sqrt((std::exp(sqr(p.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
+ 3*std::exp(2*sqr(p.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.02);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+}
+
+void
+test4()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(3, 4);
+ P p;
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d;
- P p(-1./8, 0.5);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(p.m() + sqr(p.s())/2);
- double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
- double x_skew = (std::exp(sqr(p.s())) + 2) *
- std::sqrt((std::exp(sqr(p.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
- 3*std::exp(2*sqr(p.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.02);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05);
+ D::result_type v = d(g, p);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(3, 4);
- P p;
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(p.m() + sqr(p.s())/2);
- double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
- double x_skew = (std::exp(sqr(p.s())) + 2) *
- std::sqrt((std::exp(sqr(p.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
- 3*std::exp(2*sqr(p.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.02);
- assert(std::abs((skew - x_skew) / x_skew) < 0.08);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(p.m() + sqr(p.s())/2);
+ double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
+ double x_skew = (std::exp(sqr(p.s())) + 2) *
+ std::sqrt((std::exp(sqr(p.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
+ 3*std::exp(2*sqr(p.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.02);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.08);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4);
+}
+
+void
+test5()
+{
+ typedef std::lognormal_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d;
+ P p(-0.78125, 1.25);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::lognormal_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d;
- P p(-0.78125, 1.25);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- assert(v > 0);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = std::exp(p.m() + sqr(p.s())/2);
- double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
- double x_skew = (std::exp(sqr(p.s())) + 2) *
- std::sqrt((std::exp(sqr(p.s())) - 1));
- double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
- 3*std::exp(2*sqr(p.s())) - 6;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.04);
- assert(std::abs((skew - x_skew) / x_skew) < 0.2);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7);
+ D::result_type v = d(g, p);
+ assert(v > 0);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = std::exp(p.m() + sqr(p.s())/2);
+ double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s()));
+ double x_skew = (std::exp(sqr(p.s())) + 2) *
+ std::sqrt((std::exp(sqr(p.s())) - 1));
+ double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) +
+ 3*std::exp(2*sqr(p.s())) - 6;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.04);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.2);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp
index 95d0272dbc32..69f786397711 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp
@@ -47,10 +47,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp
index 20c3a44f13e1..af9c547cb7f9 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp
@@ -48,10 +48,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp
index ef6b37e9f9cc..9210e8a8d350 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp
@@ -47,10 +47,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -83,10 +83,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -119,10 +119,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp
index 70bc29e3ad13..93053f0a36b7 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp
@@ -48,10 +48,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -85,10 +85,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -122,10 +122,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp
index b2fe52676e7e..42965b0e6ab2 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -91,10 +91,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -131,10 +131,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp
index 9879e63a33e9..e7de18fdb434 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp
@@ -52,10 +52,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp
index 6390acef8941..3f1b331889e5 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp
@@ -29,162 +29,178 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(0.5, 2);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.a() + d.b() * 0.577215665;
+ double x_var = sqr(d.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test2()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(1, 2);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.a() + d.b() * 0.577215665;
+ double x_var = sqr(d.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test3()
{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(1.5, 3);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(0.5, 2);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.a() + d.b() * 0.577215665;
- double x_var = sqr(d.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(1, 2);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.a() + d.b() * 0.577215665;
- double x_var = sqr(d.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.a() + d.b() * 0.577215665;
+ double x_var = sqr(d.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test4()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(3, 4);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(1.5, 3);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.a() + d.b() * 0.577215665;
- double x_var = sqr(d.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(3, 4);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = d.a() + d.b() * 0.577215665;
- double x_var = sqr(d.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = d.a() + d.b() * 0.577215665;
+ double x_var = sqr(d.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp
index 6152cce8f4f8..21bf774228f8 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp
@@ -29,166 +29,182 @@ sqr(T x)
return x * x;
}
-int main()
+void
+test1()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-0.5, 1);
+ P p(0.5, 2);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g, p);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = p.a() + p.b() * 0.577215665;
+ double x_var = sqr(p.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test2()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-0.5, 1);
+ P p(1, 2);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g, p);
+ u.push_back(v);
+ }
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
+ {
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
+ }
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = p.a() + p.b() * 0.577215665;
+ double x_var = sqr(p.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test3()
{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-0.5, 1);
+ P p(1.5, 3);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-0.5, 1);
- P p(0.5, 2);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = p.a() + p.b() * 0.577215665;
- double x_var = sqr(p.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g, p);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-0.5, 1);
- P p(1, 2);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = p.a() + p.b() * 0.577215665;
- double x_var = sqr(p.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = p.a() + p.b() * 0.577215665;
+ double x_var = sqr(p.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+void
+test4()
+{
+ typedef std::extreme_value_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937 G;
+ G g;
+ D d(-0.5, 1);
+ P p(3, 4);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-0.5, 1);
- P p(1.5, 3);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = p.a() + p.b() * 0.577215665;
- double x_var = sqr(p.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ D::result_type v = d(g, p);
+ u.push_back(v);
}
+ double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (int i = 0; i < u.size(); ++i)
{
- typedef std::extreme_value_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937 G;
- G g;
- D d(-0.5, 1);
- P p(3, 4);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g, p);
- u.push_back(v);
- }
- double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size();
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (int i = 0; i < u.size(); ++i)
- {
- double d = (u[i] - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= u.size();
- double dev = std::sqrt(var);
- skew /= u.size() * dev * var;
- kurtosis /= u.size() * var * var;
- kurtosis -= 3;
- double x_mean = p.a() + p.b() * 0.577215665;
- double x_var = sqr(p.b()) * 1.644934067;
- double x_skew = 1.139547;
- double x_kurtosis = 12./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs((skew - x_skew) / x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= u.size();
+ double dev = std::sqrt(var);
+ skew /= u.size() * dev * var;
+ kurtosis /= u.size() * var * var;
+ kurtosis -= 3;
+ double x_mean = p.a() + p.b() * 0.577215665;
+ double x_var = sqr(p.b()) * 1.644934067;
+ double x_skew = 1.139547;
+ double x_kurtosis = 12./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs((skew - x_skew) / x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp
index 7c26cc8a1c47..7c23630ed1e1 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -91,10 +91,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -131,10 +131,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp
index 8ed39df819d7..54a89b6b3f40 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp
@@ -52,10 +52,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -93,10 +93,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -134,10 +134,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
index f5598978bf0a..a475624a58a8 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
@@ -50,10 +50,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -89,10 +89,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -128,10 +128,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp
index c3bbdeb0ed6c..d24fbd9f9cf5 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp
@@ -52,10 +52,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -93,10 +93,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -134,10 +134,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp
index e414932dc870..cfec8c0d81e1 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -95,10 +95,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -139,10 +139,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp
index 6da705eb26c7..a19654dbd575 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp
@@ -52,10 +52,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -97,10 +97,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -142,10 +142,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp
index 5d14b3612b2e..3111912ec29c 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp
@@ -20,6 +20,7 @@
#include <vector>
#include <iterator>
#include <numeric>
+#include <algorithm> // for sort
#include <cassert>
template <class T>
@@ -30,666 +31,710 @@ sqr(T x)
return x*x;
}
-int main()
+void
+test1()
{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {25, 62.5, 12.5};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {25, 62.5, 12.5};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test2()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {0, 62.5, 12.5};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {0, 62.5, 12.5};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test3()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {25, 0, 12.5};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {25, 0, 12.5};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
- {
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test4()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {25, 62.5, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {25, 62.5, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test5()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {25, 0, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {25, 0, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test6()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {0, 25, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {0, 25, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test7()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {0, 0, 1};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {0, 0, 1};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test8()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16};
+ double p[] = {75, 25};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16};
- double p[] = {75, 25};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
- {
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test9()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16};
+ double p[] = {0, 25};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16};
- double p[] = {0, 25};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test10()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16};
+ double p[] = {1, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16};
- double p[] = {1, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
+}
+
+void
+test11()
+{
+ typedef std::piecewise_constant_distribution<> D;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14};
+ double p[] = {1};
+ const size_t Np = sizeof(p) / sizeof(p[0]);
+ D d(b, b+Np+1, p);
+ const int N = 100000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_constant_distribution<> D;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14};
- double p[] = {1};
- const size_t Np = sizeof(p) / sizeof(p[0]);
- D d(b, b+Np+1, p);
- const int N = 100000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::vector<double> prob(std::begin(p), std::end(p));
- double s = std::accumulate(prob.begin(), prob.end(), 0.0);
- for (int i = 0; i < prob.size(); ++i)
- prob[i] /= s;
- std::sort(u.begin(), u.end());
- for (int i = 0; i < Np; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::vector<double> prob(std::begin(p), std::end(p));
+ double s = std::accumulate(prob.begin(), prob.end(), 0.0);
+ for (int i = 0; i < prob.size(); ++i)
+ prob[i] /= s;
+ std::sort(u.begin(), u.end());
+ for (int i = 0; i < Np; ++i)
+ {
+ typedef std::vector<D::result_type>::iterator I;
+ I lb = std::lower_bound(u.begin(), u.end(), b[i]);
+ I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
+ const size_t Ni = ub - lb;
+ if (prob[i] == 0)
+ assert(Ni == 0);
+ else
{
- typedef std::vector<D::result_type>::iterator I;
- I lb = std::lower_bound(u.begin(), u.end(), b[i]);
- I ub = std::lower_bound(u.begin(), u.end(), b[i+1]);
- const size_t Ni = ub - lb;
- if (prob[i] == 0)
- assert(Ni == 0);
- else
+ assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
+ double mean = std::accumulate(lb, ub, 0.0) / Ni;
+ double var = 0;
+ double skew = 0;
+ double kurtosis = 0;
+ for (I j = lb; j != ub; ++j)
{
- assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01);
- double mean = std::accumulate(lb, ub, 0.0) / Ni;
- double var = 0;
- double skew = 0;
- double kurtosis = 0;
- for (I j = lb; j != ub; ++j)
- {
- double d = (*j - mean);
- double d2 = sqr(d);
- var += d2;
- skew += d * d2;
- kurtosis += d2 * d2;
- }
- var /= Ni;
- double dev = std::sqrt(var);
- skew /= Ni * dev * var;
- kurtosis /= Ni * var * var;
- kurtosis -= 3;
- double x_mean = (b[i+1] + b[i]) / 2;
- double x_var = sqr(b[i+1] - b[i]) / 12;
- double x_skew = 0;
- double x_kurtosis = -6./5;
- assert(std::abs((mean - x_mean) / x_mean) < 0.01);
- assert(std::abs((var - x_var) / x_var) < 0.01);
- assert(std::abs(skew - x_skew) < 0.01);
- assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
+ var += d2;
+ skew += dbl * d2;
+ kurtosis += d2 * d2;
}
+ var /= Ni;
+ double dev = std::sqrt(var);
+ skew /= Ni * dev * var;
+ kurtosis /= Ni * var * var;
+ kurtosis -= 3;
+ double x_mean = (b[i+1] + b[i]) / 2;
+ double x_var = sqr(b[i+1] - b[i]) / 12;
+ double x_skew = 0;
+ double x_kurtosis = -6./5;
+ assert(std::abs((mean - x_mean) / x_mean) < 0.01);
+ assert(std::abs((var - x_var) / x_var) < 0.01);
+ assert(std::abs(skew - x_skew) < 0.01);
+ assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01);
}
}
}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+ test7();
+ test8();
+ test9();
+ test10();
+ test11();
+}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp
index 6850115875bb..ffd53c05d37e 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp
@@ -17,6 +17,7 @@
// template<class _URNG> result_type operator()(_URNG& g, const param_type& parm);
#include <random>
+#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
@@ -72,10 +73,10 @@ int main()
double kurtosis = 0;
for (I j = lb; j != ub; ++j)
{
- double d = (*j - mean);
- double d2 = sqr(d);
+ double dbl = (*j - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= Ni;
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp
index af75fce512e4..03da9b8960e4 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp
@@ -19,10 +19,12 @@
#include <iostream>
#include <random>
+#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
#include <cassert>
+#include <limits>
template <class T>
inline
@@ -38,306 +40,333 @@ f(double x, double a, double m, double b, double c)
return a + m*(sqr(x) - sqr(b))/2 + c*(x-b);
}
-int main()
+void
+test1()
{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {0, 1, 1, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {0, 1, 1, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
- {
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
- }
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
- {
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
- }
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
}
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {0, 0, 1, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
- {
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
- }
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
- {
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
- }
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
}
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {1, 0, 0, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
- {
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
- }
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
}
+}
+
+void
+test2()
+{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {0, 0, 1, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16};
- double p[] = {0, 1, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
- {
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
- }
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
- {
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
- }
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
}
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14};
- double p[] = {1, 1};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
- {
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
- }
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
+ }
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
+ {
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ }
+}
+
+void
+test3()
+{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {1, 0, 0, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
+ {
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
+ }
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
+ {
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
}
+}
+
+void
+test4()
+{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16};
+ double p[] = {0, 1, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
{
- typedef std::piecewise_linear_distribution<> D;
- typedef D::param_type P;
- typedef std::mt19937_64 G;
- G g;
- double b[] = {10, 14, 16, 17};
- double p[] = {25, 62.5, 12.5, 0};
- const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
- D d(b, b+Np+1, p);
- const int N = 1000000;
- std::vector<D::result_type> u;
- for (int i = 0; i < N; ++i)
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
+ {
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
+ }
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
+ {
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- D::result_type v = d(g);
- assert(d.min() <= v && v < d.max());
- u.push_back(v);
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ assert(k < Np);
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
- std::sort(u.begin(), u.end());
- int kp = -1;
- double a;
- double m;
- double bk;
- double c;
- std::vector<double> areas(Np);
- double S = 0;
- for (int i = 0; i < areas.size(); ++i)
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ }
+}
+
+void
+test5()
+{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14};
+ double p[] = {1, 1};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
+ {
+ assert(i < Np);
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
+ }
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
+ {
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
- S += areas[i];
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ assert(k < Np);
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
- for (int i = 0; i < areas.size(); ++i)
- areas[i] /= S;
- for (int i = 0; i < Np+1; ++i)
- p[i] /= S;
- for (int i = 0; i < N; ++i)
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ }
+}
+
+void
+test6()
+{
+ typedef std::piecewise_linear_distribution<> D;
+ typedef D::param_type P;
+ typedef std::mt19937_64 G;
+ G g;
+ double b[] = {10, 14, 16, 17};
+ double p[] = {25, 62.5, 12.5, 0};
+ const size_t Np = sizeof(p) / sizeof(p[0]) - 1;
+ D d(b, b+Np+1, p);
+ const int N = 1000000;
+ std::vector<D::result_type> u;
+ for (int i = 0; i < N; ++i)
+ {
+ D::result_type v = d(g);
+ assert(d.min() <= v && v < d.max());
+ u.push_back(v);
+ }
+ std::sort(u.begin(), u.end());
+ int kp = -1;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
+ std::vector<double> areas(Np);
+ double S = 0;
+ for (int i = 0; i < areas.size(); ++i)
+ {
+ areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2;
+ S += areas[i];
+ }
+ for (int i = 0; i < areas.size(); ++i)
+ areas[i] /= S;
+ for (int i = 0; i < Np+1; ++i)
+ p[i] /= S;
+ for (int i = 0; i < N; ++i)
+ {
+ int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
+ if (k != kp)
{
- int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1;
- if (k != kp)
- {
- a = 0;
- for (int j = 0; j < k; ++j)
- a += areas[j];
- m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
- bk = b[k];
- c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
- kp = k;
- }
- assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
+ a = 0;
+ for (int j = 0; j < k; ++j)
+ a += areas[j];
+ m = (p[k+1] - p[k]) / (b[k+1] - b[k]);
+ bk = b[k];
+ c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]);
+ kp = k;
}
+ assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001);
}
}
+
+int main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+}
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp
index fe704228e788..8054a69fed87 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp
@@ -20,7 +20,9 @@
#include <vector>
#include <iterator>
#include <numeric>
+#include <algorithm> // for sort
#include <cassert>
+#include <limits>
template <class T>
inline
@@ -58,10 +60,10 @@ int main()
}
std::sort(u.begin(), u.end());
int kp = -1;
- double a;
- double m;
- double bk;
- double c;
+ double a = std::numeric_limits<double>::quiet_NaN();
+ double m = std::numeric_limits<double>::quiet_NaN();
+ double bk = std::numeric_limits<double>::quiet_NaN();
+ double c = std::numeric_limits<double>::quiet_NaN();
std::vector<double> areas(Np);
double S = 0;
for (int i = 0; i < areas.size(); ++i)
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
index 66693a8da55b..2abc9d4c6dd5 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -92,10 +92,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -133,10 +133,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -174,10 +174,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -215,10 +215,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -256,10 +256,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -297,10 +297,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -338,10 +338,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -379,10 +379,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -431,10 +431,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp
index d83d48cac1e3..849f25107fa8 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp
@@ -51,10 +51,10 @@ int main()
double kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- double d = (u[i] - mean);
- double d2 = sqr(d);
+ double dbl = (u[i] - mean);
+ double d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp
index 2663b2683bb4..e000363f3215 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp
@@ -51,10 +51,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -91,10 +91,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -131,10 +131,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -171,10 +171,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -211,10 +211,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -251,10 +251,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -291,10 +291,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -331,10 +331,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -371,10 +371,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -411,10 +411,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
@@ -451,10 +451,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp
index b5803f401465..d351f0caed71 100644
--- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp
+++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp
@@ -51,10 +51,10 @@ int main()
D::result_type kurtosis = 0;
for (int i = 0; i < u.size(); ++i)
{
- D::result_type d = (u[i] - mean);
- D::result_type d2 = sqr(d);
+ D::result_type dbl = (u[i] - mean);
+ D::result_type d2 = sqr(dbl);
var += d2;
- skew += d * d2;
+ skew += dbl * d2;
kurtosis += d2 * d2;
}
var /= u.size();
diff --git a/test/std/numerics/rand/rand.synopsis/version.pass.cpp b/test/std/numerics/rand/rand.synopsis/version.pass.cpp
deleted file mode 100644
index eae6c493e919..000000000000
--- a/test/std/numerics/rand/rand.synopsis/version.pass.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <random>
-
-#include <random>
-
-#ifndef _LIBCPP_VERSION
-#error _LIBCPP_VERSION not defined
-#endif
-
-int main()
-{
-}