Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TestRandomUniformDistribution.cpp
1 #include <Base/Math/Random.hh>
2 
3 using namespace BIAS;
4 using namespace std;
5 
6 bool verbose = false;
7 
8 int main(int argc, char *argv[])
9 {
10  Random MyRandom;
11  const unsigned num_vals = 10000000;
12  unsigned min_val = 10, max_val = 200;
13  vector<unsigned> hist(max_val-min_val+1, 0);
14  for (unsigned i=0; i<num_vals; i++){
15  int val = MyRandom.GetUniformDistributedInt(min_val, max_val);
16  BIASASSERT(val>=(int)min_val && val<=(int)max_val);
17  hist[val-min_val]++;
18  }
19 
20  double mean_hist_entry = (double)num_vals / (double)hist.size();
21  double max_acceptable_hist_eps = max(5.0, mean_hist_entry*0.1);
22  for (unsigned i=0; i<hist.size(); i++){
23  double hist_eps = fabs((double)hist[i] - mean_hist_entry);
24  if (hist_eps>max_acceptable_hist_eps){
25  for (unsigned t=0; t<hist.size(); t++){
26  if (verbose){
27  cout << t+min_val << "\t"<<hist[t] << endl;
28  }
29  cerr << "hist["<<t+min_val<<"]: "<<hist[t]
30  <<" (eps "<< fabs((double)hist[t] - mean_hist_entry)<<")\n";
31  }
32  cerr << "#mean hist_entry: "<<mean_hist_entry<<endl;
33  BIASABORT;
34  }
35  }
36 
37  if (verbose){
38  for (unsigned t=0; t<hist.size(); t++){
39  cout << t+min_val << "\t"<<hist[t] << endl;
40  // cout << "hist["<<t+min_val<<"]: "<<hist[t]
41  // <<" (eps "<< fabs((double)hist[t] - mean_hist_entry)<<")\n";
42  }
43  cout << "#mean hist_entry: "<<mean_hist_entry<<endl;
44  }
45  return 0;
46 }
int GetUniformDistributedInt(const int min, const int max)
get uniform distributed random variable including min/max
Definition: Random.cpp:139
class for producing random numbers from different distributions
Definition: Random.hh:51