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.
- Текущее состояние генератора случайных чисел обновляется с использованием переданного в качестве аргумента значения