Advertisement
Taraxacum

random_number_generater_test

Jan 8th, 2020
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int rand_by_mod(int r, int sup) { return r % sup; }
  9.  
  10. int rand_by_extend(int r, int sup) { return r * sup / (RAND_MAX + 1); }
  11.  
  12. double entropy(unsigned counter[], int size, double sum) {
  13.   double ent = 0;
  14.  
  15.   for (int i = 0; i < size; i++) {
  16.     double freq = counter[i] / sum;
  17.     ent += -freq * log2(freq);
  18.   }
  19.  
  20.   return ent;
  21. }
  22.  
  23. int main(int argc, char const *argv[]) {
  24.   constexpr int sup = 16;
  25.   unsigned counter_by_mod[sup] = {0};
  26.   unsigned counter_by_extend[sup] = {0};
  27.  
  28.   for (int cnt = 0; cnt <= RAND_MAX; cnt++) {
  29.     int r = rand();
  30.     counter_by_mod[rand_by_mod(r, sup)]++;
  31.     counter_by_extend[rand_by_extend(r, sup)]++;
  32.   }
  33.  
  34.   printf("rand_by_imagine  %.6f \n", -log2(1.0 / sup));
  35.   printf("rand_by_mod      %.6f \n", entropy(counter_by_mod, sup, RAND_MAX));
  36.   printf("rand_by_extend   %.6f \n", entropy(counter_by_extend, sup, RAND_MAX));
  37.  
  38.   return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement