Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- #include <iostream>
- using namespace std;
- int rand_by_mod(int r, int sup) { return r % sup; }
- int rand_by_extend(int r, int sup) { return r * sup / (RAND_MAX + 1); }
- double entropy(unsigned counter[], int size, double sum) {
- double ent = 0;
- for (int i = 0; i < size; i++) {
- double freq = counter[i] / sum;
- ent += -freq * log2(freq);
- }
- return ent;
- }
- int main(int argc, char const *argv[]) {
- constexpr int sup = 16;
- unsigned counter_by_mod[sup] = {0};
- unsigned counter_by_extend[sup] = {0};
- for (int cnt = 0; cnt <= RAND_MAX; cnt++) {
- int r = rand();
- counter_by_mod[rand_by_mod(r, sup)]++;
- counter_by_extend[rand_by_extend(r, sup)]++;
- }
- printf("rand_by_imagine %.6f \n", -log2(1.0 / sup));
- printf("rand_by_mod %.6f \n", entropy(counter_by_mod, sup, RAND_MAX));
- printf("rand_by_extend %.6f \n", entropy(counter_by_extend, sup, RAND_MAX));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement