25 #ifdef USE_TESTMANAGER_AUTOREGISTER
38 namespace Test_RandomNumbers {
41 const std::string filename_input =
"test_RandomNumbers_Mseries_Uniform.yaml";
42 const std::string filename_output =
"stdout";
44 class Parameters_Test_RandomNumbers :
public Parameters {
46 Parameters_Test_RandomNumbers()
48 Register_int(
"number_of_seeds", 0);
49 Register_int(
"seed_base", 0);
50 Register_int(
"number_of_samples", 0);
52 Register_string(
"verbose_level",
"NULL");
54 Register_double(
"expected_result", 0.0);
62 #ifdef USE_TESTMANAGER_AUTOREGISTER
65 "RandomNumbers.Mseries.Uniform",
75 Parameters_Test_RandomNumbers params_test;
82 params_manager.
read_params(filename_input, ¶ms_all);
84 int Nseed = params_test.get_int(
"number_of_seeds");
85 int seed_base = params_test.get_int(
"seed_base");
86 int Nrand = params_test.get_int(
"number_of_samples");
87 const string str_vlevel = params_test.get_string(
"verbose_level");
89 const double expected_result = params_test.get_double(
"expected_result");
98 vout.
general(vl,
" vlevel = %s\n", str_vlevel.c_str());
105 vout.
general(vl,
" number of samples = %10d\n", Nrand);
110 for (
int iseed = 0; iseed < Nseed; ++iseed) {
111 int iseed2 = seed_base + iseed;
116 for (
int i = 0; i < Nrand; ++i) {
117 double rn1 = rand->
get();
118 double rn2 = rand->
get();
119 double r = rn1 * rn1 + rn2 * rn2;
120 if (r < 1.0) { ++Npi; }
124 double pi_exp = (4.0 * Npi) / Nrand;
127 t2 += pi_exp * pi_exp;
130 vout.
general(vl,
" %10d %14.10f\n", iseed2, pi_exp);
135 double api = t1 / (double)Nseed;
136 double vpi = t2 / (double)Nseed - api * api;
137 double dpi = sqrt(vpi);
138 double epi = dpi / sqrt((
double)Nseed - 1);
140 double pi = 3.141592653589793;