Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Olya13254
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 29
#1

Конгруэнтные генераторы псевдослучайных последовательностей - C++

01.10.2012, 21:51. Просмотров 1470. Ответов 0
Метки нет (Все метки)

Ниже приведен генератор псевдослучайных последовательностей, который объединяет два линейных конгруэнтных генератора с периодами 231-85 и 231-249.

C++
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
/* "long" должно быть 32-битовым целым
static long s1 = 1;
static long s2 = 1;
 
/* MODMULT (a, b, c, m, s) рассчитывает s*b mod m при условии, что m = a*b+c и 0<=c<m
#define MODMULT(a, b, c, m, s) q = s/a; s = b*(s-a*q)-c*q; if (s<0) s+=m;
 
/* Возвращает действительное псевдослучайное значение в диапазоне (0,1) */
double CombLCG (void)
{
long q;
long z;
 
MODMULT(53668, 40014, 12211, 2147483563L, s1)
MODMULT(52774, 40692, 3791, 2147483399L, s2)
 
z = s1 - s2;
 
if(z<1)
z += 2147483562;
 
return z*4.656613e-10;
}
 
/* Инициализирует CombLCG, вызывается один раз перед использованием */
void InitLCG(long InitS1, long InitS2)
{
s1 = InitS1;
s2 = InitS2;
}
Этот генератор работает при условии, что компьютер способен представить все целые числа в диапазоне от -231+85 до 231-249. Переменные s1 и s2 глобальные и содержат текущее состояние генератора. Перед вызовом CombLCG() необходимо инициализировать состояние генератора вызовом InitLCG() и передать начальные значения s1 и s2. Для s1 начальное значение берётся из диапазона [1, 2147483562], а для s2- из диапазона [1, 2147483398]. Период генератора близок к 1018.
Необходимо провести серию экспериментов (не менее 5), изменяя длину последовательности и начальные значения s1, s2. Для каждого эксперимента вычислить математическое ожидание и дисперсию. Подскажите, как реализовать, пожалуйста. Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2012, 21:51     Конгруэнтные генераторы псевдослучайных последовательностей
Посмотрите здесь:

Генераторы случайных чисел - C++
Задание такое: Реализовать иерархию понятий: гсч с равномерным распределение, гсч с нормальным распределение и гсч в качестве абстрактного...

Словари,генераторы слов,время - C++
Всем привет.Хотел бы очень получить ответ на следующие вопрос:1)Можно ли к программе каким то образом подключить словарь и сделать так...

Генерация псевдослучайных чисел!!! - C++
Помогите кто чем может!!пожалуйста! Составьте программу, реализующую линейный конгруэнтный ГПСЧ, и способную генерировать случайные...

Генератор псевдослучайных чисел - C++
Всем привет. Как такое &quot;чудо&quot; пишеться, примерный алгоритм, если можно на псевдокоде: Написать генератор псевдослучайных чисел по...

Генератор псевдослучайных чисел. - C++
Здраствуйте. Мне нужно сделать вот что &quot;Написать генератор псевдослучайных чисел по алгоритму r = r * 4231 + 123457; Подсчитать частоты...

Генератор псевдослучайных чисел. - C++
Написать генератор псевдослучайных чисел по алгоритму r = r * 4231 + 123457; Подсчитать частоты попадания в каждый из интервалов...

генератор псевдослучайных чисел... - C++
Вот програмулька генерирующая псевдослучайные числа создавалась по алгоритму X(n+1)=a*X(n)+c*(mod M) кто может подсказать как выводить...

Генератор псевдослучайных чисел - C++
Народ, помогите плиз с решением этой задачи. Мне надо управляемый генератор равновесных псевдослучайных парных наборов.. Вот просто...

C++11 генерация псевдослучайных чисел - C++
Хотел заполнить матрицу максимального потребления ресурсов процессами (алгоритм банкира), но при генерации чисел возникла проблема (ошибка...

Генератор псевдослучайных чисел - C++
Написать генератор псевдослучайных чисел по алгоритму r = r * 4231 + 123457; Подсчитать частоты попадания в каждый из интервалов длиной...

Генерация псевдослучайных чисел - C++
Здравствуйте! Пишу программу, в ней мне нужно использовать случайные числа, сгенерированные в заданном диапазоне. Подскажите пожалуйста,...

Генератор псевдослучайных чисел - C++
Данный генератор работает по конгруэнтному методу, формула X_{n} = ( a X_{n-1}^3 + b X_{n-1}^2 + c X_{n-1} + d )\mod 2^e. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru