random. Генерация псевдослучайных чисел на компьютере
HTML-код
- Опубликовано: 28 июл 2024
- Описывается линейный конгруэнтный метод генерации псевдослучайных чисел. Это один из самых популярных методов, используемых в компьютерах.
Моя группа ВКонтакте electronics_nn
Выражаю благодарность тем, кто поддерживает меня финансами.
Реквизиты для финансовой поддержки можно найти в
/ foo52ru Наука
Я до сих пор жду продолжение искусственной жизни.
Я частично написал код второго мира, реализована только часть задуманных команд, но уже можно запускать и смотреть на бегающих ботов. Но это отбирает слишком много времени, пока забросил. Виноват. Всё собираюсь дописать, но другие идеи покоя не дают. Обещаю исправиться.
Богдан, ты ни один) Хотя я уже начал забывать об этом)
спасибо што читаеш и отвичаеш жду делай на славу
@@foo52ru, спасибо, что делишься с нами такой увлекательной информацией.
@@foo52ru а тема с клеточными автоматами по типу life не привлекает?
Классный урок, очень доступное объяснение, понятно что криптография - это очень емкая тема, но нужно уметь говорить просто о сложно что и делает автор! Спасибо
У вас очень интересные ролики, пожалуйста снимайте их почаще! Лайк, подписка само собой.
Все круто, у вас очень годный ламповый контент👍
Спасибо вам за видео, всегда очень интересно и все понятно объясняете!
08:17 "Если в интернете не врут, то сейчас мне должны лайки ставить"
Орнул в голос и поставил лайк
Я поставил лайк и сразу же у слищел об этом.
А я ещё вначале ролика заметил среди мелькающих цифр слово "ШОК!". Даже ткнул паузу, и нашёл этот кадр, чтобы убедиться, что не показалось. Поэтому в конце ролика совсем не удивился, когда среди мелькающих цифр увидел повторяющиеся "LIKE", "LIKE", "LIKE" :)
Спасибо за старания, весьма интересно!
Большое спасибо за ваши видео
Ну а я точно знаю, что может генерировать поток лайков и подписку на канал - твой годный контент. Спасибо большое, очень интересно.:)
очень рады видеть. Как же я жду продолжение искусственной жизни....
Просто и понятно, как и сам алгоритм. Жаль тема не была продолжена для ГСЧ и выше.
Мегакрутой канал, респект автору!
Спасибо за видео очень интересно и полезно
Огромное спасибо, очень полезно.
Делаешь уникальный контент, продолжай!
Последние видосы топ, удачи)))))
Качественно и интересно супер спасибо класс
Спасибо за подробные разъяснения! Теперь имею представление, что не всё, что называется рандомом в программировании, рандомно
Это было мозгосшибательно но суть уловил струдом ) Спасибо) хотелось бы продолжение с подводной лодкой, даёшь 20 тыс. лье под водой)
объяснил всё как бог
Отличное качество видео супер класс
Спасибо, интересно...
6:15 как все просто оказывается. вот спасибо два слова и я прозрел, как после прочтения энциклопедии)
Очень интересно и поняио
очень круто!
Интересное видео😀. Сделай пожалуйста визуализацию гспч
Годно
божественно
Может это и имелось в виду под выражением "Случайности не случайны" ?=))
спасибо! и отдельное спасибо тому маньяку.
на сколько я знаю для генерации случайных чисел в ЭВМ СССР использовали шумящий p-n переход
Вы гениус
Михаил, здравствуйте. А если при создании своего генератора, при генерации нового числа, создать указатель *ptr на последнее случайное число например? Далее, в return генератора пишем: return ptr++; таким образом указатель укажет на следующую ячейку памяти в которой уже другое число. И так при каждом вызове генератора.
В интернете не врут! Как раз в этот момент лайк ставил))
В том примере, который ты показал на 3.40, повторение последовательности связано с тем, что последняя цифра была 0, так ведь?
Здравствуйте! Что за музыка играет в ролике?
Автор , этот алгоритм иназывается "псевдо случайным", его проблема в размерности так называемой SEED , то есть разрядностью этого счетчика , если бы разрядность была бесконечна то и алгоритм бы работал без повторов но у вы в первом вшем примере на равна Int 32 бита , в втором char 8 бит вот от туда и повторы, можно этот алгоритм серьезно улучшить , в качестве SEED (srand команда) использовать прямо независящие параметры привысокой разрядности числа например 64 бита , например секунды с запуска в степени загруки процессаора корень текущая мили секунда + счетчик... и так далее тогда эта функция будет работат , я делал рандом генератор который в приделах int64 не повторялся не в одном из int64 запусков ... но отдельные короткие последовательности иногда в 4 многда в 6 чисел в последовательности имели повтор, меня в общем то удовлетварила такая реализация (для рандомногогереатора ключей в алгоритме шифрования RSA использовал)
вообще в криптографических процессорах используется аппаратный генератор белого шума для получения тогосамогоинициализирующего значения , причем как парвило не с одного канала, я както тестировал по пояс китайскую микруху ставил их 8 в ряд сливал все данны ена комп ипытался найтикак в нутри так и между каждй совпадения , в общем вылазило межмикрухами 1 в несколько миллиардов и причем не разу в одних итех же ... а естьвесьма серьёзные микросхемы ...
+Fastereus в качестве ЗЕРНА.
Так в видео об этом сказано. Что вообще ждать от ГПСЧ?
Расово верный рандом должен давать еще расово верное распределение.
может брать результат первой генерации и заменять на какую либо константу и потом снова брать результат и снова подставлять? Так можно или да?
Добрый вечер подскажи пожалуйста если что то знаешь. Есть генератор случайных чисел в Гугле там может быть такое что что энное количество чисел может повторятся через несколько ходов по заводским настройкам.
Тебя замечательно смотреть на 1.5 скорости. Была бы дикция как у журналиста, можно было бы даже х2
Тема знакомая, даже очень, но интересно узнать про "крипто-стойкие" генераторы.
уже собрали все что можно...
x(n)=1-2*x*(n-1)^2 вот быстрый алгоритм. последовательность зависит только от х(0), хЄ(-1,1)
если описать его быстрее в виде группы преобразований:
mul x,x
mul x,-2
inc x
хороший быстрый рандом, быстрее чем вызов рандом функции встроенной
Может это глупый вопрос, но откуда брать х?
@@user-yy7bq1zx8r 1
В микроконтроллере AVR можно наловить случайных чисел с пустого пина порта, настроенного на вход без подтяжки, его значение будет метаться. между 1 и 0 в зависимости от помехи.
Помехи тоже не случайны.
@@suifutors Да, но они труднопредсказуемы
Класс
Возможно сделать не псевдослучайные последовательности используя математику?.. т.е. с криптографической стойкостью или типа того.
Как говорила одна черепаха: "Случайности не случаны!"...
Альберт Тлюкабиров этой черепахой был Альберт
Энштейн
@@unex6859 кстати да, Энштейн рили был детерминистом и срался в переписке с Бором и Планком по поводу абсолютных случайностей в квантовой физике. Как выяснилось, Энтшейн был не прав и, например, период полураспада ядер урана абсолютно ни от чего не зависит. Он просто происходит сам по себе. Абсолютная случайность.
И правильно срался :)
Случайность - это событие без причины. То, что мы не в состоянии детерминировать квантовый мирок, не означает, что там всё происходит беспричинно.
@@testman1865 ну, круто. Энивей каждый останется при своём мнении. Я тоже хотел бы, чтобы всё происходило из-за причинно-следственных связей, но, увы, это не так. Законы макро-мира не работают в микро-мире. Однако, если двигаться ещё глубже, то всё, что происходит в макро-мире основывается на событиях микро-мира. Любой физический закон всегда несет в себе вероятностный характер. Даже F=ma в теории может не произойти. В теории даже все молекулы твоей комнаты могут банально сжаться в одной точке и ты просто задохнешься, но этого никогда произойдет как минимум за всё время существования нашей вселенной. Просто потому что вероятность всех этих событий стремится к нулю. Там реально вероятность где-то 10^(-26), может еще меньше, не помню.
Иными словами, физические законы нашего макроскопического мира работают только потому, что все микроскопические штуки случайно происходят, но при этом происходят с бесконечно большой вероятностью, как я уже упоминал про воздух.
Подробнее об этом писал, кажется, Мякишев в учебнике физики за 10 класс, стр 265, второй закон термодинамики.
А вообще, касательно случайностей, я советую к просмотру небольшую вырезку из лекций Александра Чирцова, кандидата физ.мат наук про случайности в квантовой физике:
ruclips.net/video/uD4izuDMUQA/видео.html
Там всё довольно понятно.
На самом-то деле я также как и вы считал, что весь наш мир детерминирован. Но просто нужно принять то, что в мире существуют абсолютно случайные события.
@@Zeding_Stuff При помощи математики возможно описать всё реальное, и не реальное. Точно так же, как при помощи слов. То, что физика упёрлась в невозможность практически детерминировать события микро-мира, и приходиться использовать инструменты вероятности, не означает, что события происходят там случайным образом. Очень тонкая уловка, в которую многие, увы, попадают.
Хмм, а возможно ли брать случайное число из белого шума (аналового)
Я помню в своё время очень удивился, когда в универе нашёл толстенную книгу Кнута, посвящённую ГСПЧ. Не понимал тогда почему эта тема так важна.
Dyas Dark все еще не понимаю 🤔
Навёл мышку на лайк, не успел нажать, а ты сказал "сейчас мне должны лайки ставить". ))) Нажал.))
Насколько помню из юности, *случайность* определяется вероятностью выпадения одинаковых комбинций в битовом потоке. Для белого шума равномерно падает в завимости от числа бит. Т.е чем болше бит в комбинации тем ниже их вероятность. По окончании цикла (разрядность) все повторятся, но другой задачи в этих функциях и не ставилось.
Чувак,я нихрена не понял что ты сказал ! Но ты мне близок,ты заговорил и достучался до сердца...!
тоесть нужно сбивать ему последовательность раз в N ходов ? прошло N ходов и меняем алгоритм ?
Можно ли сгенерировать случайное число?
Можно на дату и время завязаться тогда в каждую новую секунду будет уникальная последовательность. Но всё же можно предсказать и её
Пожалуйста, где мне найти этот минус, играющий на фоне??? Очень прошу
Слушай а вот от 1 до 20 шаг повтора должен быть мелкий да?
Привет, хотел спросить в c++11 появился рандом mt19937, можешь рассказать про этот алгоритм?
Если буду для себя разбирать другие алгоритмы, то возможно сделаю видео. Данный ролик получился спонтанно, после спора. Решил проверить на практике, повторяется ли последовательность, стал копать глубже, так всё это и вылилось в ролик. Видел другие алгоритмы, но пока их не разбирал.
Моя дипломка по этои теме. Посоветуйте что нибудь...
Потому аналог - наше всё)) в мк тяну постоянно данные с АЦП если нужна более корректная случайность)
Слушай, а наводки от сети 50 Гц не влияют разве?
А как на счет настоящего рандома? Придумать как его создать.. например на основе какого нибудь аналогового датчика шумящего
Я школьником ещё на Spectrum'e пробовал, чтобы компьютер "сам" писал музыку. С помощью RND, задавалась высота, продолжительность звука и паузы между ними. После недолгой отладки (на бейсике всё разумеется) программа успешно работала. Но мелодией это не являлось. Иногда что-то угадывалось, не более.
Но, блин, тогда это было интересно.
а если написать генетический алгоритм на OpenCL вместо случайных чисел использовать то, который поток карта взяла на выполнение первым, и вообще интересно запускать такие миры без графической оболочки, как бы это странно не звучало, на GPU
Гсч кастлот говорят не получается сделать обход. И наипать людей
Для проверки случайности на случайность существует автокорреляционная функция. Мы ее использовали для обнаружения цели на фоне коррелированных и псевдослучайных помех.
При поиске повторений последовательности из 15-ти сколько совпавших подряд идущих встречал? Я имею ввиду последовательность начинает повторяться, но это ещё не повторение, а совпадение. Сколько чисел совпадали до настоящего повторения?
Первых два числа из запомненой последовательности повторялись. Это кстати, на видео видно. Вроде было, что и два раза первые два числа повторялись. Последовательности из 3 и более чисел не было.
А если a, c, m занести случайным образом в массив от 1 до 256 и их последовательно брать? Наверное это сильно рандомизирует полученные результаты.
Последовательность, выдаваемая алгоритмом из ролика проходит тесты на случайность, вряд ли они станут более "случайные". Но период, до начало повторения, наверно, резко возрастёт. Если есть необходимость в большом периоде, то, возможно, это имеет смысл. Я не математик, возможно ошибаюсь.
0:13 там вместе с числами появилось слово ШОК! и еще разные появляются
это 25 кадр. Откуда вы думаете у меня столько подписчиков?
@@foo52ru вот и новая тема для следующего видео, работает ли 25 кадр.
и ещё на 0:16 есть и т.д.
В MCU делал случайные числа, основываясь либо на шуме АЦП, либо на компараторе, к которому подключен резистор примерно в мегаом и два куска провода в качестве антенны. На компараторе мне больше понравилось -- реально полная белиберда получается. Плохо только, что это всего один бит, и приходится генерацию во времени размазывать, собирая биты. Конечно, для шифрования такой рандом не подойдет.
Прошу! Скиньте музыку из видео
Афигеть!!!! Так вот как это решается...
1. Никак раньше не мог понять программу на ассемблере кр58080вм (вектор 06ц)как в двоичной система производилось деление.
2. Незнал как сгенерировать случайные числа в заданном диапазоне, да так чтобы числа не повторялись, а перебрались полностью.... афигеть. (Пример заполнение (прорисовка) картинки пикселями в случайном порядке)
Всякий, кто питает слабость к арифметическим методам получения случайных чисел, грешен вне всяких сомнений. (Джон фон Нейман)
Привет.
Привет.
Привет.
Привет.
Привет.
Доброго времени суток! Как с вами связаться??
В интернете врут, но лайк поставил
А я поставил лайк, а через долю секунды услышал про "лайки ставить". Улыбнуло. ))
4:43 ты показал список "Константы для линейных конгруэнтных генераторов", а где полный их список? Откуда ты взял а = 5, с = 1, m = 256? Явно же не наугад? Или есть какой-то способ их составления, чтобы они были удачными?
В статье в википедии есть правила выбора констант, но они не гарантируют хороший результат. Константы 5, 1, 256 взял из книги про AVR. Точнее не константы, а сам код и только делая этот ролик до меня дошло, что это и есть метод, про который ролик делаю.
очень круто! Жаль что обычному человеку, далекому от программирования ничего не понятно. А можно тоже самое, но с "примеркой" к конкретным фактам из жизни, где это можно эффективно применить, владея подобными знаниями? Ну например лотерея, игры, или еще где-то....
А можно как то предугадать когда нужный предмет появится в том месте где нужно? Количество вариаций предмета известно. Количество мест тоже известно. Сами предметы сменяют свои места каждый день рандомно
Научу машину, "Настоящей случайность", я так пароли себе делаю, главное в блокноте делать, чтобы знать. Закрываешь глаза 10 раз крутишься, хаотично и беспорядочно жмёшь накнопки.
Можно провести опыт, что бы узнать повторяется ли результат. Надо всего лишь 2^32х10 раз покрутится.
Как успехи?
давай следующий ролик про дискретное логорифмирование или про элептические кривые на конечных полях или про sha2 шифрование. Что нибудь на тему биткоина?
Думал что пришёл посмотреть как работает функция рандом, а оказалось что я пришёл на математику)
так шо ты хотел?) думал, что компьютер кости бросает, чтобы случайное число получить?)
Блин какой умный мужик. Походу он бога скоро подвинет) а че, жизнь и естественный отбор он уже создал и смоделировал
Рондомное повторение на повторение в безконечность, они будут повторяться постоянно система закрыта, она конечна и дублируется постоянно, есть код возможно искусственная симуляция!
А зафигачь Rule 30 в кольце с визуализацией и генерацией псевдо-случайных чисел, для которой биты берутся из произвольной колонки. Очень наглядно можно сделать: и показать влияние единственного бита инициирующей последовательности на все получаемые значения, и как влияет длина кольца на длину цикла (можно даже численный эксперимент организовать и сравнить результаты с расчетными значениями), и про одномерные клеточные автоматы просветить публику. Чем не тема для выпуска? :)
Спасибо за наводку, почитаю на досуге.
Никогда не понимал, почему просто не использовать для базиса генератора "шум" от аналоговых датчиков или неизбежны колебания питающего напряжения (тысячные доли вольта)? Шум всегда присутствует, он действительно случайный и гарантирует уникальность выходной последовательности...
Изменено: глянул в вике про алгоритмы гпсч, там пишут, что внешние шумы используют редко потому, что:
"Время и трудозатраты при установке и настройке по сравнению с программными ГПСЧ" - утверждение не выглядит обоснованным, или как минимум не раскрыто
"Дороговизна" - опять таки, не понятно что тут дорогого?
"Генерация случайных чисел происходит медленнее, чем при программной реализации ГПСЧ" - считать значение с аналового входа как минимум сопостовимой по сложности с выполнением нескольких математиматических операций, а в идеале может быть реализовано и дешевле
"Невозможность воспроизведения ранее сгенерированной последовательности случайных чисел" - хм... Разве не в этом смысл случайных последовательностей?
По приколу запилил алгоритм генерации случайных чисел на ардуинке на основе шума от аналогового входа, на который подключён операционный усилитель с уже его входом, весящим в воздухе. Работает практически так же быстро, как и "стандартный" rand(), повторяющиеся последовательности больше 20 чисел обнаружить не удалось, распределение, более или менее равномерное, с оговоркой на то, что значения все таки случайные и время от времени попадаются несколько одинаковых или очень близких чисел подряд, но вроде так и должно быть:)
А таким образом значит можно и карты сделать?
В майнкрафте смотрите так и делается, бесконечный автогенерируемый мир.
на волю слу. аю? тогда вот самый простой генератор простых чисел. длина окружности с точностью до стальки чисел сколько сама длина окружности. если длина 123см значит точность до 123 чисел. и 33 последних числа будут всегда случайны. при длине окружности. измени длину и будет другой результат.
для чисел являющихся степенями двойки деление это сдвиг что вроде известно
а вот остаток от деление это наложение маски
мне в одном проекте надо было максимально ускорить некоторые рассчеты
// this hack works only with power-of-2 values
// how we get 0x3F mask for 64 int value
// 0100 0000 = 64
// set all higher bits to 1
// 1100 0000
// and invert them
// 0011 1111 = 0x3F
//
// for example for mod16 we get next mask
// 16 = 0001 0000
// set higher = 1111 0000
// invert = 0000 1111
// mask = 0x0F
// so val % 16 == val & 0x0F
Спасибо! понял одно, компьютер не генерирует случайные числа. Компьютерная рулетка не случайна, а просчитывается спинами )))
Так какой конкретно параметр микросхема считает случайным числом? Напряжение где-то в какой-то момент?
Какая микросхема?
@@foo52ru процессор, допустим. У меня где-то валяется калькулятор Casio и там есть генератор случайного числа. Вот где он берет это число?
@@user-rq7uw9qb5u, скорее всего, там либо часы тикают, либо он дополнительно отталкивается от предыдущего вычисления. Во втором случае полнейший рандом получается
@@albertdantist4516 Но это не точно?)
Пересмотрел видео второй раз. Немного стало доходить. Но я серавно не всё понял, ибо я не работал на ассемблере!
В PHP интересно, как генерируется
Вот так:
github.com/php/php-src/blob/623911f993f39ebbe75abe2771fc89faf6b15b9b/ext/standard/random.c
github.com/php/php-src/blob/master/win32/winutil.c
*например для win
Здравствуйте, я думаю, что вы не против, если я разместил ссылку на это видео в поучительных целях?
Я только за.
Пересмотри вступление. Там мелькают забавные (или не очень) слова. Да-да, среди чисел. Типа:"МИР В ШОКЕ!" и "ОТ НАС СКРЫВАЛИ..."
обалдеть более 2000 строк кода. может все таки пайтон использовать? там готовые библиотеки есть. и учить его говорят проще) ну не проще пиксель ленг но все же
4:15 "два раза здвиг, что равноценно умножению на 4" это ты про двоичную систему?
операция сдвига в ассемблере, это все биты в регистре сдвигаются, в данном случае влево, а крайний правый бит становиться равным 0. Это как умножение на два. В десятичной системе это выглядит бы так: было 0056, стало 0560. То есть умножение на десять. В младших микроконтроллерах нет инструкции умножения, поэтому применяются подобные конструкции. Ну и пример переполнения. Есть 4-разрядная ячейка памяти (десятичная). В ней записано 1234. Делаем сдвиг влево, получилось 2340. Первая единичка выпала. Получилось (1234*10) mod 1^4
😘
я жду искуственую жызнь
А если включить в состав процессора мини-антенну и снимать с неё данные, то это будет та неприемлимая "воля случая", о которой говорилось в цитате?
п. с. Подозреваю, что у такого способа будут любимчики, то есть диапазон случайных чисел там будет с разной плотностью вероятности.
подведешь к этой антенне какую-нибудь рацию, и уже не очень случайные числа пойдут
Афигеть автор, ты гений!!!
Есть в России люди с мозгами!!! Дайте им дорогу !!!
уже дали, на фронт.
Дайте название трека, пожалуйста
soundcloud.com
пользователь foo52ru
название трека не помню.
ваши ролики безумны, я вас считаю маньяком, информационным маньяком, решил написать это тут, сложно держать в себе
Этот комментарий - проявление эмоциональной слабости
Как мне казалось, алгоритмы вычисления рандома всегда засекречивают...
Если все алгоритмы популярных систем шифрования в открытом доступе, открытость рандома не удивляет.