Квадратичный конгруэнтный метод




zt+1 = (dx2t + axt + c) mod N, t = 0,1,2…

Характеристики (x0, a, c, d, N) Є V4N × N квадратичной конгруэнтной последовательности

Кубический конгруэнтный метод. Последовательность случайных чисел вычисляется с помощью следующего рекуррентного соотношения

Xi+1=(ax3+ax2+ax+d)mod m

Для практических расчетов принимают m=2k, k=14,15,31

 

1. #include <iostream>

2. using namespace std;

3. double congruential(int &); // прототип функции генерации псевдослучайных чисел

4. int main(int argc, char* argv[])

5. {

6. const int number_numbers = 25; // количество псевдослучайных чисел

7. int x0 = 2; // начальное значение (выбирается случайно 0 <= x0 < m)

8. cout << "\npseudo-random numbers: ";

9. for (int i = 0; i <= number_numbers; i++)

10. cout << congruential(x0) << " "; // генерация i-го числа

11. cout << "\n";

12. system("pause");

13. return 0;

14. }

15. double congruential(int &x) // функция генерации псевдослучайных чисел

16. {

17. const int m = 100, // генерация псевдослучайных чисел в диапазоне значений от 0 до 100 выбирается случайно m > 0)

18. a = 8, // множитель (выбирается случайно 0 <= a <= m)

19. inc = 65; // инкрементирующее значение (выбирается случайно 0 <= inc <= m)

20. x = ((a * x) + inc) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел

21. return (x / double(m));

22. }



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: