Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- void generate(uint32_t *to, uint32_t count, uint32_t x0, uint32_t a, uint32_t b, uint32_t m)
- {
- to[0] = x0;
- for(uint32_t i = 1; i < count; ++i)
- to[i] = (a * to[i - 1] + b) % m;
- }
- void reduce(uint32_t *to, const uint32_t *from, uint32_t count, uint32_t categories)
- {
- for(uint32_t i = 0; i < count; ++i)
- to[i] = from[i] % categories;
- }
- void reduceToNormal(double *to, const uint32_t *from, uint32_t count, uint32_t m)
- {
- for(uint32_t i = 0; i < count; ++i)
- to[i] = double(from[i]) / double(m);
- }
- void count(uint32_t *to, const uint32_t *from, uint32_t n)
- {
- for(uint32_t i = 0; i < n; ++i)
- to[from[i]]++;
- }
- void output(const uint32_t *data, uint32_t count)
- {
- for(uint32_t i = 0; i < count; ++i)
- std::cout << i << ": " << data[i] << "\n";
- }
- void output(const double *data, uint32_t count)
- {
- for(uint32_t i = 0; i < count; i += 3)
- std::cout << i << ": " << data[i] << " " << data[i + 1] << " " << data[i + 2] << "\n";
- }
- int main()
- {
- const uint32_t
- a = 1103515245u,
- b = 12345u,
- m = 1u << 31u, // 2^31
- n = 27*3;
- uint32_t distribution[n];
- double doubleResults[n];
- generate(distribution, n, 0, a, b, m);
- reduceToNormal(doubleResults, distribution, n, m);
- output(doubleResults, n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement