1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<iostream> #include<random> using namespace std; template<typename T> class RandGenerator { public: T a_; using result_type = T; explicit RandGenerator(T a) : a_(a) {} virtual constexpr T operator()() =0;
}; class RandGenerator1 : public RandGenerator<int> { public: RandGenerator1(int a) : RandGenerator<int>(a) {} constexpr int operator()() { a_ = (a_ ^ 61) ^ (a_ >> 16); a_ *= 9; a_ = a_ ^ (a_ >> 4); a_ *= 0x27d4eb2d; a_ = a_ ^ (a_ >> 15); return a_; } static constexpr int min() { return 0; } static constexpr int max() { return 100; } }; int main() { random_device rd; mt19937 rng(rd()); uniform_int_distribution<int> dist(0, 100); uniform_real_distribution<double> dist2(0, 100); normal_distribution<double> dist3(0, 100); RandGenerator1 rng1(0); for (int i = 0; i < 10; ++i) { cout << dist(rng1) << endl; cout << dist(rng) << endl; cout << dist2(rng) << endl; cout << dist3(rng) << endl; } }
|