fork download
  1. // linear_congruential.cpp: определяет точку входа для консольного приложения.
  2. //линейный конгруэнтный метод генерации псевдослучайных чисел
  3.  
  4. #include <iostream>
  5. #include <math.h>
  6. using namespace std;
  7.  
  8. // класс функтора-генератора
  9. class congruential
  10. {
  11. public:
  12. congruential(int initial) : last(initial) {}
  13. double operator() ()
  14. {
  15. const int m = 65536, // генерация псевдослучайных чисел в диапазоне значений от 0 до 100 (выбирается случайно m > 0)
  16. a = 5171, // множитель (выбирается случайно 0 <= a <= m)
  17. inc = 35574; // инкрементирующее значение (выбирается случайно 0 <= inc <= m)
  18. last = ((a * last) + inc) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел
  19. return (last / double(m));
  20. }
  21. private:
  22. int last;
  23. };
  24.  
  25. int main(int argc, char* argv[])
  26. {
  27. const int number_numbers = 20; // количество псевдослучайных чисел
  28. congruential generator(2); // генератор
  29. double e = 0; //число по экспоненциальному закону расспределиня
  30. cout << "\npseudo-random numbers:\n";
  31. for (int i = 0; i <= number_numbers; i++)
  32. {
  33. cout << generator() << " " << float(-2*log(generator())) << endl;
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0s 5564KB
stdin
Standard input is empty
stdout
pseudo-random numbers:
0.700623 1.54409
0.889465 0.064947
0.319519 0.507754
0.139221 1.57229
0.434509 1.88173
0.728821 2.58068
0.483093 0.962299
0.595764 2.86017
0.902771 0.518482
0.677551 3.65978
0.131042 3.6221
0.911682 0.32244
0.605408 4.48657
0.235657 4.17802
0.763367 0.184191
0.586975 0.468798
0.0424194 0.224754
0.903137 0.814993
0.880066 2.02297
0.121643 1.16281
0.713806 0.910057