Rand выводит один и то же порядок чисел - C (СИ)
Формулировка задачи:
Добрый день, не могли бы вы помочь, я уже спрашивал насчет рэндом, все окей, генерирует число, но почему при компиляции выходит один и тот же порядок чисел?
(например,если в цикле выводить: 1, 5, 2, 43, 18, еще раз программу запускаю и выходят точно такие же числа)
Решение задачи: «Rand выводит один и то же порядок чисел»
textual
Листинг программы
static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned seed) { next = seed; }
Объяснение кода листинга программы
Вот список элементов кода, который оформлен в виде нумерованного списка:
- static unsigned long next = 1;
- Объявлена статическая переменная
next
типаunsigned long
и инициализирована значением 1. Эта переменная используется в качестве текущего состояния генератора случайных чисел.
- Объявлена статическая переменная
- int myrand(void) {
- Определена функция
myrand
, которая возвращает случайное целое число.
- Определена функция
- *next = next 1103515245 + 12345;**
- Текущее состояние генератора случайных чисел обновляется путём умножения на константу
1103515245
и добавления 12345. Это называетсясмешиванием
илиперемешиванием
состояния генератора.
- Текущее состояние генератора случайных чисел обновляется путём умножения на константу
- return((unsigned)(next/65536) % 32768);
- Возвращается случайное целое число в диапазоне от 0 до 32767. Для этого значение
next
делится на 65536 (максимальное значение для 16-битного числа), и результат берется по модулю 32768.
- Возвращается случайное целое число в диапазоне от 0 до 32767. Для этого значение
- void mysrand(unsigned seed) {
- Определена функция
mysrand
, которая устанавливает начальное значение генератора случайных чисел (seed).
- Определена функция
- next = seed;
- Текущее состояние генератора случайных чисел обновляется с использованием переданного в качестве аргумента значения
seed
. В этом коде используется простой генератор случайных чисел, основанный на алгоритмеLCG
(линейный конгруэнтный генератор). Он генерирует псевдослучайные числа в диапазоне от 0 до 32767. Этот диапазон может быть изменен, если потребуется, путем изменения делителя в выражении(next/65536) % 32768
.
- Текущее состояние генератора случайных чисел обновляется с использованием переданного в качестве аргумента значения
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д