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

C++

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

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

01.10.2012, 21:51. Просмотров 1423. Ответов 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++ Builder
Генератор псевдослучайных чисел. C++
генератор псевдослучайных чисел... C++
C++ Генератор псевдослучайных чисел.
C++ Генератор псевдослучайных чисел
C++ Словари,генераторы слов,время
C++ Генерация псевдослучайных чисел!!!
C++ Генератор псевдослучайных чисел
Генераторы случайных чисел C++
C++ Генерация псевдослучайных чисел.с++
Генератор псевдослучайных чисел C++
C++ C++11 генерация псевдослучайных чисел

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

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

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