*https://youtu.be/TgKDZyecDRY?si=Pis079XZgC1aetEk
**https://300.ya.ru/v_LxFunAi4
Таймкоды
00:00:00 Введение в генерацию случайных чисел
- Компьютер генерирует псевдослучайные числа, а не настоящие случайные.
- Настоящие случайные числа используются в криптографии и интернет-казино.
- Пример использования атмосферных шумов для генерации случайных чисел.
00:00:47 Реализация рандома в C++
- В C++ используется алгоритм, основанный на преобразовании большого числа.
- Большое число обычно берётся из таймстемпа — количества секунд с 1 января 1970 года.
00:01:23 Принцип работы алгоритма
- Алгоритм использует сид для генерации уникальных случайных чисел.
- Один и тот же сид приводит к выдаче одинаковых чисел или карт в играх.
00:01:53 Реализация функции rand
- Функция rand берёт предыдущее значение, умножает его на константу и прибавляет 12345.
- Значение делится на 65536, что эквивалентно сдвигу на 16 бит вправо.
- Результат преобразуется в беззнаковое целое число.
00:02:48 Завершение алгоритма
- Для получения числа от 0 до максимума берётся остаток от деления на максимум.
00:03:06 Заключение
- Линейный конкурентный метод используется во многих компиляторах, но его реализация в C++ считается устаревшей.
- Автор призывает не использовать эту реализацию на практике.
- Благодарность зрителям и призыв подписаться на канал.
Transcript
Search in video
0:00
Привет Это канал Деня и вы никогда не
0:02
задумывались как компьютер генерирует
0:04
случайные числа ведь компьютер — это
0:06
машина и она может лишь складывать чётко
0:09
ноль или чётко единицу где же тут взять
0:12
случайности на самом деле компьютер
0:14
такого не умеет А всё что он умеет это
0:16
генерировать псевдослучайные числа
0:18
которые лишь похожи на случайные ведь и
0:20
вправду нам не всегда нужно прямо
0:22
случайное число ведь получение
0:24
случайного числа — это трудно затратная
0:26
операция Да и к тому же ты бы никогда не
0:28
выбил к на с настоящим рандомом
0:32
настоящая Случайность используется в
0:33
областях где нужна криптографическая
0:35
стойкость например в интернет-казино я
0:38
надеюсь По крайней мере например сайт
0:40
random.org берёт атмосферные шумы
0:42
оцифровывать их и получает случайные
0:44
числа к такому точно Ты не докопались но
0:47
в наших с вами языках программирования
0:48
такого точно нет я предлагаю вам
0:50
посмотреть на самую популярную
0:51
реализацию рандома взятую из
0:53
компиляторов C и c+ Plus вот так вот она
0:56
выглядит и Да не удивляйтесь что тут
0:58
Всего пару строчек кода Давайте сначала
1:00
расскажу вам принцип работы данного
1:02
алгоритма нам нужно взять очень большое
1:05
число и произвести с ним ряд
1:06
преобразований на самом деле так
1:08
работают очень многие алгоритмы как бы
1:10
рандома а как нам взять большое большое
1:13
число чаще всего это тайм СМП который в
1:16
сиш варианте берётся Вот так таймстамп —
1:18
это количество секунд которое прошло с 1
1:20
января 1970 года как раз то что нам
1:24
нужно Мега большое число с которым уже
1:26
можно производить какие-то операции это
1:28
значение будет использовано как сит вы
1:30
возможно слышали такое слово если играли
1:32
в Minecraft или другую игру с случайной
1:34
генерацией мира там это реализовано с
1:37
помощью шума Перлина но и там без
1:39
случайности Я думаю не обошлось если
1:41
Смотрели видосы про шум Перлина знаете
1:43
про что я говорю если задать один и тот
1:45
же сит то алгоритм выдаст одно и то же
1:47
число или одну и ту же карту что очень
1:49
удобно для геймеров которые могут
1:51
коллекционировать сиды разных прикольных
1:53
карт а теперь наконец-то перейдём к
1:55
реализации функции Run которая
1:57
генерирует случайное число всего в две в
2:00
две строчки кода она берёт наше
2:02
предыдущее значение это может быть сит
2:04
если мы первый раз запустили Рандом или
2:05
уже как бы предыдущее число которую
2:08
получена с помощью этой функции множатся
2:10
его на вот такую константу и прибавляет
2:13
к нему
2:15
12345 как я понял эти значения взяты
2:18
опытным путём и весомых оснований к ним
2:20
нету да то есть каким-то какие-то умные
2:23
дядьки нашли что именно эти числа дают
2:26
нам хорошую псевдо Случайность потом
2:29
значение делится на
2:31
65.536 что эквивалентно 2 вше степени
2:34
или сдвигу на 16 битов вправо да ведь
2:37
сдвиг вправо Это как раз есть деление
2:40
Вот и потом мы это касти или
2:43
преобразовывает чтобы получить как бы да
2:45
целое плюсовое число всё это сделано для
2:48
хорошего распределения случайных чисел
2:50
по всему как бы числовому ряду который у
2:52
нас получится чтобы числа не повторялись
2:55
а потом мы можем взять остаток отделения
2:57
на максимум который мы хотим полу чить и
3:00
в итоге у нас получится там от нуля до
3:03
какого-то максимума который мы установим
3:05
в константе Теперь у нас есть рабочий
3:07
алгоритм генератора псевдо случайных
3:09
чисел или ПЧ Настоятельно не советую
3:12
использовать такую реализацию на проде
3:14
или вообще где-либо потому что данную
3:16
реализацию уже выпили даже из
3:17
компилятора C и C п+ за устойчивость к
3:20
взломам Кстати этот метод называется
3:22
линейный конгруэнтный метод И на самом
3:25
деле используется он во многих
3:26
компилятора Хотя Надеюсь уже нет Зато
3:28
теперь вы знаете как генерируются
3:30
случайные числа и можете рассказать
3:32
соседу Пете почему он проиграл все
3:34
деньги на трёх топорах или нет А я хочу
3:37
сказать спасибо что посмотрели этот
3:38
короткий видос э подписывайтесь на канал
3:41
на Telegram канал на наш чатик там очень
3:43
круто Вот Всем удачи и всем
3:46
[музыка]
3:52
пока

