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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
landan
7 / 7 / 0
Регистрация: 07.07.2010
Сообщений: 157
#1

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

04.11.2010, 19:08. Просмотров 3782. Ответов 8
Метки нет (Все метки)

Помогите написать программу, которая генерировала бы случайные числа мультипликативным конгруэнтным методом. Нужно использовать такое рекуррентное выражение xi= а*xi (mod m).

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

Генератор случайных чисел повторяется - C++
Вот начало кода int x, y; char rs='y'; y=rand()%999+1; Это игра "Угадай число". В первый раз генератор всегда создает число...

Генератор случайных чисел в объекте - C++
Вообщем в объекте числа генерятся одни и те же, в main все норм(хотя рандомом их тож особо не назвоёшь, в ВСтудии и КодеБлокс видимо разные...

Генератор случайных вещественных чисел, C++ - C++
Возможно кому-то пригодится. Без дополнительных библиотек, вроде сносный такой генератор. #include <iostream> #include <cmath> ...

Генератор случайных чисел. Массив - C++
Суть вот в чём: Создать двумерный массив размерностью 3х3 дабы он заполнялся случайными числами. После это выполнить определённые...

Генератор случайных чисел в интервале (0;10) - C++
Как сгенерировать случайную последовательность целых чисел лежащих в интервале то 0 до 10? Т.е. как задать границы для генерации ПСЧ.

Генератор случайных неповторяющихся чисел - C++
Народ помогите! Проблема следующая. Я создал массив и заполнил его числами с помощью rand от -20 до 20. Как сделать так, чтобы при выводе...

Генератор случайных чисел (double) - C++
Товарищи,перерыл весь интернет и учебники и не могу понять,что не так в моем коде. У меня задача: сделать матрицу случайных вещественных...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
04.11.2010, 22:23     Генератор случайных чисел #4
Сильно сомневаюсь, что должно. Разве что вас специально учат неправильно, для прикола - как Скрипучие Тапочки. Но неважно, принцип-то несложный. Надо завести переменную, в которой запоминается последнее полученное значение. Изначально туда заносится 5. Затем при каждом вызове ГСЧ заносить в неё результат операции x = (a*x)%35 и возвращать это x. В зависимости от выбранного a, но не позже, чем через 7 вызовов, ГСЧ начнёт выдавать сплошные нули.
slice
34 / 77 / 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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++
Срочно нужен генератор случайных чисел С++(Builder), что бы можно было впихнуть в курсовую . Заранее спасибо

Генератор случайных чисел на С++ <random> - C++
генератор случайных чисел в &lt;random&gt; http://www.cplusplus.com/reference/random/ генератор постоянно генерирует одни и те же числа,...

Генератор случайных двоичных чисел - C++
Подскажите плиз как сделать так, чтоб выводило двоичные числа? rand_t random() { static rand_t srand = time(NULL); ...

Генератор массива случайных чисел - C++
Есть массив, хочу заполнить его случайными числами, причем с каждым запуском числа должны быть разные, поэтому просто rand() не прокатит....

генератор случайных чисел Эрланга - C++
необходим генератор случайных чисел. Не могу понять в чем заключается ошибки. Error C2065 'root': undeclared identifier ...


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

Или воспользуйтесь поиском по форуму:
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     Генератор случайных чисел
Ответ Создать тему
Опции темы

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