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

Генератор случайных чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
04.11.2010, 19:08     Генератор случайных чисел #1
Помогите написать программу, которая генерировала бы случайные числа мультипликативным конгруэнтным методом. Нужно использовать такое рекуррентное выражение xi= а*xi (mod m).

Параметры
Х0=5
А/p=?
M=35
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 19:08     Генератор случайных чисел
Посмотрите здесь:

C++ Генератор случайных чисел
генератор случайных чисел C++
C++ Генератор случайных чисел
Генератор случайных чисел C++
Генератор случайных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
04.11.2010, 19:44     Генератор случайных чисел #2
На таких условиях при любом a будут выходить только числа из набора 0, 5, 10, 15, 20, 25, 30
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
04.11.2010, 19:52  [ТС]     Генератор случайных чисел #3
Nick Alte, значит так и должно быть, помогите с кодом
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
04.11.2010, 22:23     Генератор случайных чисел #4
Сильно сомневаюсь, что должно. Разве что вас специально учат неправильно, для прикола - как Скрипучие Тапочки. Но неважно, принцип-то несложный. Надо завести переменную, в которой запоминается последнее полученное значение. Изначально туда заносится 5. Затем при каждом вызове ГСЧ заносить в неё результат операции x = (a*x)%35 и возвращать это x. В зависимости от выбранного a, но не позже, чем через 7 вызовов, ГСЧ начнёт выдавать сплошные нули.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
04.11.2010, 22:26     Генератор случайных чисел #5
Рекомендую смотреть в сторону этого:
http://ru.wikipedia.org/wiki/Аппарат...лучайных_чисел
Все остальное грязный фэйк.
Zilon
5 / 5 / 0
Регистрация: 05.11.2010
Сообщений: 60
05.11.2010, 01:27     Генератор случайных чисел #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define MOD 35
#define X0 5
#define RNG_A //???
 
ArrayShuffler::ArrayShuffler()
{
    x = X0
}
 
 
int ArrayShuffler::random(int mod)
{
    return  x = (x * RNG_A) % MOD;
}
Но чему равно RNG_A?
Или при не оптимальном модуле нужно самому выбрать оптимальный RNG_A?
Сейчас посмотрим...

Последовательность чисел, порождаемая линейным конгруэнтным методом, периодична с периодом, не превышающим m. При этом длина периода в точности равна m тогда и только тогда, когда:
c и m = 1 (то есть c и m взаимно просты);
a - 1 кратно p для всех простых делителей p числа m;
a - 1 кратно 4, если m кратно 4.

фигня выходит. По расчетам RNG_A должно быть равно минимум 36 при таком m.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
05.11.2010, 09:16     Генератор случайных чисел #7
При данной формуле последовательность практически сразу вырождается в нули. Даже при лучших условиях это произойдёт не позже, чем через M обращений к ГСЧ.
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
07.11.2010, 18:48  [ТС]     Генератор случайных чисел #8
Zilon, не работает, ошибка на 7 строке

Добавлено через 1 час 23 минуты
Вот что нашел
Хо — нечетно;
а=52р+1 (р=0, 1, 2, ...) или a=2m+3 (m=3, 4, 5, ...) — обе эти записи означают, что младшая цифра а при представлении а в восьмеричной системе счисления должна быть равна 3 или 5 (проще говоря, остаток от деления а/8 должен быть равен 3 или 5);
m=2 (1>4).
При соблюдении этих ограничений, длина периода будет равна m/4.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2010, 18:51     Генератор случайных чисел
Еще ссылки по теме:

C++ Генератор случайных чисел
C++ генератор случайных чисел

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

Или воспользуйтесь поиском по форуму:
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
08.11.2010, 18:51  [ТС]     Генератор случайных чисел #9
[QUOTE=Zilon;1085020]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define MOD 35
#define X0 5
#define RNG_A //???
 
ArrayShuffler::ArrayShuffler()
{
    x = X0
}
 
 
int ArrayShuffler::random(int mod)
{
    return  x = (x * RNG_A) % MOD;
}
как это скомпилировать?
Yandex
Объявления
08.11.2010, 18:51     Генератор случайных чисел
Ответ Создать тему
Опции темы

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