Advertisement
Savior

C++11 random

May 12th, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <random>
  5. using namespace std;
  6.  
  7. std::random_device rd;      // Типа генератор реального рандома, если сие поддерживается ОС.
  8.                         // В Linux, например, учитывает сигналы из драйверов, движения мыши и тому подобное. Из него берем seed.
  9. std::uniform_int_distribution<int> distr(0, 10);    // Дистрибьютор рандома.
  10.  
  11. int main()
  12. {
  13.     const int iterations = 10000;
  14.     std::vector<std::map<int, int>> vals;
  15.     for (int i = 0; i < 3; i++)
  16.         vals.push_back(std::map<int, int>());
  17.     std::mt19937 mt(rd());  // Три генератора
  18.     std::ranlux24 ran24(rd());
  19.     std::ranlux48 ran48(rd());
  20.     for (int i = 0; i < iterations; i++)
  21.     {
  22.         ++vals[0][distr(mt)];
  23.         ++vals[1][distr(ran24)];
  24.         ++vals[2][distr(ran48)];
  25.     }
  26.     auto print = [](const std::pair<int, int> &pair) {  // Лямбда-функция. Охуеннейшая вещь.
  27.         std::cout << pair.first << ": " << pair.second << '(' << (pair.second / static_cast<float>(iterations)) * 100 << "%)\n";
  28.     };
  29.     std::cout << "Mersenne Twister:\n";
  30.     for (auto &m : vals[0])
  31.         print(m);
  32.     std::cout << std::endl;
  33.     std::cout << "Ranlux24:\n";
  34.     for (auto &m : vals[1])
  35.         print(m);
  36.     std::cout << std::endl;
  37.     std::cout << "Ranlux48:\n";
  38.     for (auto &m : vals[2])
  39.         print(m);
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement