Заговор генераторов случайных чисел

  Рет қаралды 47,475

ExtremeCode

ExtremeCode

Күн бұрын

Пікірлер: 108
@stl4521
@stl4521 7 жыл бұрын
Код работал на 20-66 MHz процессоре. За вашим космолетом не успевает.
@Qnoize
@Qnoize 5 жыл бұрын
Это потому, что 31 обладает хорошим свойством - его умножение можно заменить битовым сдвигом, который быстрее стандартного умножения: 31 * i == (i
@ExtremeCode
@ExtremeCode 5 жыл бұрын
А почему у Кнута было 21? D:
@s1mon878
@s1mon878 4 жыл бұрын
Подожди, подожди ты хочешь сказать что чел, блять, три недели изучал какую то там книгу, какого чувака (сорри если это важная книга важного чувака) для того чтобы ты пришёл и оставил коммент и ответил на вопрос, лол. (не знаю почему но это кажется очень смешным.)
@SoundsOfLimbo
@SoundsOfLimbo 3 жыл бұрын
@@ExtremeCode bruh, 3:33
@ВасилийТрусиль
@ВасилийТрусиль 3 жыл бұрын
Чел, ты этим сдвигом на 32 умножишь
@noki9930
@noki9930 3 жыл бұрын
@@ВасилийТрусиль ну так он вычитает i
@flachy7
@flachy7 7 жыл бұрын
Я сексуальная брюнетка с 3 размером груди.... лойс за разследование и Кнута в часности
@ЮрийР-щ7м
@ЮрийР-щ7м 7 жыл бұрын
тоже иногда палю как random с каждым запуском выдает одни и те же комбинации... лезть в него я конечно не буду))
@Rustamushko
@Rustamushko Жыл бұрын
Такая же проблема есть с генерацией неуникальных guid если их в цикле создавать. Для этого в winApi сделали специальную функцию, через которую запрашиваешь необходимое кол-во гуидов, которые надо сгенерить. Вангую, что в дотнете тоже есть метод, который генерит массив криптостойких рандомов, скорее всего надо искать в крипто неймспейсе. Короче, не нужно рандом в цикле теребонькать.
@ДЕРЖАВИН-т1л
@ДЕРЖАВИН-т1л 7 жыл бұрын
Всё заебись, но звук бы погромче
@СергейБолдин-в9м
@СергейБолдин-в9м 3 жыл бұрын
У тебя есть кнопки на телефоне! Сделай звук громче ими!
@LLlblKAPHO
@LLlblKAPHO Жыл бұрын
Что бы сгенерировать рандомные числа, достаточно спросить у либеральных экономистов сколько будет стоить бакс завтра. Ну или если серьёзно, то почему бы не использовать шум интернета или поставить антенну в процессор, которая будет чувствительно воспринимать шум радио сигналов или даже электричества, или ловить шум фоновой радиации, фотонов и прочего электромагнитного излучения
@minty6989
@minty6989 3 жыл бұрын
2 варианта решения проблемы: 1. Заставит вашу программу немного затормозить. После вывода каждого рандомного числа делаем Thread.Sleep(7); Почему 7? Нечетное число после которго нельзя будет проследить последовательность генерации чисел, но можно и 13 и любые другие числа выше 1 (иначе будут генериться просто последовательные числы). Работает за счет того, что мы заставляем процесс уснуть на 7мс, что позволяет сгенерировать новое рандомное число опираясь на тайминги. 2. Сделать конструкцию new Random(i).Next(); - работает потому что как сид вместо времени мы подпихиваем кастомные числа.
@Rustamushko
@Rustamushko Жыл бұрын
Nice try. Только на 7ms не усыпишь поток, ибо «system clock resolution”.
@konstantingeist3587
@konstantingeist3587 6 жыл бұрын
они рандомны относительно своей последовательности, остальное твои проблемы :)
@miker5879
@miker5879 6 жыл бұрын
using Troschuetz.Random; вот норм генератор int temp = new TRandom(new NR3Generator()).Next(100); вообще топчик
@mikeefpv
@mikeefpv 7 жыл бұрын
возможно правильнее использовать Random random = new Random(); вне (до)цикла итераций чтобы объект класса Random не создавался по одному и тому же значению времени что и дает по идее одинаковые выводы .Next();
@MrFrimko
@MrFrimko 7 жыл бұрын
это понятно, но вопрос не в этом
@mikeefpv
@mikeefpv 7 жыл бұрын
йоу, а в чем конкретно?
@MrFrimko
@MrFrimko 7 жыл бұрын
почему происходит то что происходит, попытка понять в чем магия, почему рендом класс при инициализации в цикле выдает одинаковые числа(рандом же должен быть)
@mikeefpv
@mikeefpv 7 жыл бұрын
я запросто могу ошибаться, но - при инициализации класса единственная случайная переменная из которой потом математически выводятся новые псевдослучайные числа - это время жизни пк с последнего запуска.(или около того) современные пк работают настолько быстро, что итерации цикла в котором есть и new и потом .next а потом заново - происходит условно мгновенно. таким образом эта единственная случайная переменная всегда одинаковая, а все что происходит дальше, это чистая математика которая опирается на эту переменную. а переменная(которая зависит от времени)- одна и та же. она еще не успела изменится, пк работает быстро. поэтому и вывод цикла одинаковый.
@AlexCSharp
@AlexCSharp 6 жыл бұрын
Mikee Tankovsky Собственно, автор ролика о том же. Но так практически все(а может и вообще все) цифровые генераторы работают, они все псевдогенераторы.Настоящий генератор можно сделать только аналоговым.
@DixStore
@DixStore 7 жыл бұрын
Проблема в том что используется объект new Random внутри цикла for а если его вынести то все будет генерировать случайным
@IvanAndreev91
@IvanAndreev91 3 жыл бұрын
Ну 1 раз из миллиона понадобится сгенерировать случайное число внутри набора объектов, которые получают значения каких-то свойств случайным образом во время инициализации, но этого не поизойдёт по причине сабжа и настанет апокалипсис
@grafgeleon2420
@grafgeleon2420 7 жыл бұрын
Интерсно, годно, даёшь ещё
@soltaurus
@soltaurus 4 жыл бұрын
Дружище, ты инициализируешь класс одним и тем же значением, а именно меткой времени с точностью до мс. Странно было бы ожидать другого результата
@КвасИСышка
@КвасИСышка 6 жыл бұрын
Умники, которые говорят что-то вроде этого "Там ко-ко-ко надо было ко-ко инициализировать до цикла ко". Автор показывает, сам алгоритм, и то чтобы вы не напоролись на этот кол, когда подумаете решить через new Random().Next()
@paschanchik
@paschanchik 6 жыл бұрын
хз. У меня, даже если я инициализировал "До", работало так же хуево
@ohnocoder
@ohnocoder 3 жыл бұрын
Видео: *научное* Я: *научный* ExtremeCode: Так б@$$* что за x^%%^
@Стряпаемпирожкитут
@Стряпаемпирожкитут 7 жыл бұрын
Снимаю шляпу, господа
@mortimersmith359
@mortimersmith359 4 жыл бұрын
2.38 отсылочка топ
@oganovdavid
@oganovdavid 7 жыл бұрын
я оруууу)))))))))))) соскучился по вашим видосам)) //замечу что тут написано, что 31 - очень важное число))) ахаххаха
@musikuma8424
@musikuma8424 4 жыл бұрын
По факту проблема начального значения, и не в чём ином, ибо генератор псевдослучайных чисел. Решение проблемы повтора с System.Random: 1. Использование экземпляра вне цикла. 2. Передача параметра (System.Int32) System.DateTime.Now.Ticks (или другого, что будет обновляться быстрее выполняемой операции) 3. Применить другой алгоритм генерации.
@fartuna777
@fartuna777 3 жыл бұрын
Ответ на главный вопрос жизни, вселенной и всего такого
@Buarpa
@Buarpa 5 жыл бұрын
Братюни спасибо за видео, поделюсь наблюдениями ... ВАЖНО !!! люблю делать автозаполнение объектов для тестирования, имена / числа / etc... числа генерируються с упором на время, лучше всего для объяснения подходит C++ по тому что я его немного знаю в функции rand() не знаю каким образом есть генератор ОДИНАКОВЫХ чисел со входящим параметром - что это значит ? если мы пишем for (i=0; i< x3 ;i++) rand(i) у нас будут светиться одинаковая последовательность чисел, для большей рандомизации чисел придумали srand(time(nullptr)); при наличии функции rand() в поле видимости srand(time(nullptr)) в функцию rand(x) передаётся время вплоть до Милисекунд*(текущее время), в секунде по принципам математики 100 МилиСекунд, так вот ... есть функция sleep(1000) которая делает простой программы в месте её написания, из расчёта что 1000 = 1 секунда, что б сделать полный рандом нужно между генератором случайных чисел поставить sleep(11) !!! 11 - не меньше, по тому что 10 ещё не заходит на первую милисикунду*(тестил) так что при написании кода у вас будет полный рандом ... пример: #include // for time(nullptr) #include #include // for Sleep(11); using namespace std; int main() { std:srand(time(nullptr)); for (int i = 0; i < 100; i++) { Sleep(11); // Thread.Sleep(); // for C# std::cout
@Buarpa
@Buarpa 5 жыл бұрын
+ Sleep(11); нужно прописывать в конструкторах объектов если нужен рандом ...
@pnt7791
@pnt7791 6 жыл бұрын
4 8 15 16 23 42
@andreyandrey2223
@andreyandrey2223 4 жыл бұрын
Что это?
@pnt7791
@pnt7791 4 жыл бұрын
@@andreyandrey2223 4 8 15 16 23 42
@andreyandrey2223
@andreyandrey2223 4 жыл бұрын
@@pnt7791 Чё?
@pnt7791
@pnt7791 4 жыл бұрын
@@andreyandrey2223 Милый Андрей, погуглите :)
@ДмитрийПахомов-р8у
@ДмитрийПахомов-р8у 3 жыл бұрын
Lost!!
@ВолодимирСередюк-м7т
@ВолодимирСередюк-м7т 7 жыл бұрын
А если с рандомом использовать такую конструкцию: int[] mas = new int[1000]; mas[0] = new Random().Next(); for (int j = 1; j < 1000; j++) { mas[j] = new Random().Next(); while(mas[j].Equals(mas[j - 1])) { mas[j] = new Random().Next(); } } ето будет не правильно?) п.с. для генерации 1000 рандомных чисел
@ExtremeCode
@ExtremeCode 7 жыл бұрын
var random = new Random(); for(int i = 0; i < 1000; i++){ cw(random.Next()); }
@ВолодимирСередюк-м7т
@ВолодимирСередюк-м7т 7 жыл бұрын
а что за метод "cw"?
@mikeefpv
@mikeefpv 7 жыл бұрын
volstep seredyuk Console.WriteLine();
@ВолодимирСередюк-м7т
@ВолодимирСередюк-м7т 7 жыл бұрын
Спасибо за ответ)
@flachy7
@flachy7 7 жыл бұрын
это код с текущего проджекта ленивца, не обращай внимание
@nick-test
@nick-test 3 жыл бұрын
И это всё??? А где ответ на главную загадку? 3:33 Что за 31 и почему 31? Как спать теперь то..
@fvrcbv1558
@fvrcbv1558 4 жыл бұрын
Если вопрос актуален. Сделайте переменную рандома статическим
@h_it
@h_it 3 жыл бұрын
3 года прошло... Это прям сильно, мучится от рандома три года
@anreechase8020
@anreechase8020 Жыл бұрын
Может тогда лучше брать не время от запуска системы, а значение дата-время с максимальной точностью, тогда это точно не будет повторяться.
@АлександрБычко-п9ъ
@АлександрБычко-п9ъ 5 жыл бұрын
Ха а через компилятор на сайте майкрософта такой проблемы нет ) Все из-за модификатора [ThreadStatic] поля private static Random t_threadRandom; private static readonly Random s_globalRandom = new Random(GenerateGlobalSeed()); не обновляются, поэтому генерируются одинаковые последовательности Равноценно new Random(int a).Next(); Где вместо а можно подставлять любое целое число и будет генерироваться из него последовательность одинаковых чисел. Как - то так.
@ExtremeCode
@ExtremeCode 5 жыл бұрын
Этот косяк пофиксили давным-давно, с какой-то ревизией .NET Core , так что не актуально уже :)
@Tropen91
@Tropen91 5 жыл бұрын
Это тебе не баши баратрума счетать.
@daimirmus
@daimirmus Жыл бұрын
Еще случайно обнаружил что Random если указать промежуток выдачи чисел от -х до х выдает 70% отрицательных чисел. Протестил это на ооочень большем объеме чисел. Может кто знает в чем тут дело?
@klasterdev154
@klasterdev154 7 жыл бұрын
Можно юзать Thread.Sleep(10) перед каждой генерацией, я таким костылем во всех лабах подпирал)
@АркадийСтон
@АркадийСтон 7 жыл бұрын
ну это совсем пиздец)
@magictime8959
@magictime8959 3 жыл бұрын
@@АркадийСтон согласен
@Ais_Hunt
@Ais_Hunt 2 жыл бұрын
Там должно быть не 21, не 31, а 42!
@andrusia2048
@andrusia2048 3 жыл бұрын
в лото настоящий рандом
@rbogdan8980
@rbogdan8980 7 жыл бұрын
Просто оставлю это здесь: var rnd = new Random(); for (int i = 0; i < 10; i++) Console.WriteLine(rnd.Next());
@ExtremeCode
@ExtremeCode 7 жыл бұрын
Спасибо!
@dsstepanov
@dsstepanov 7 жыл бұрын
потому что singleton
@FalyonkiGuy
@FalyonkiGuy 5 жыл бұрын
Недавно такое произошло со мной. Я подумал, что сломал компьютер... 😮
@TheKOTLUIS
@TheKOTLUIS 5 жыл бұрын
Очень познавательно и полезно - правда них... не понял =) Теперь для маленьких и тупых - запили свой рандомайзер процедуру( функцию) или как ты там хочешь назвать её =) покажи и разбери как он работает.
@AzDzelo
@AzDzelo 4 жыл бұрын
Правильное использование System.Random : System.Random r = new System.Random(); for (int i = 0; i < 10; i++) { print(r.Next()); } и будет Вам счастье.
@IvanAndreev91
@IvanAndreev91 3 жыл бұрын
А если рандом используется внутри класса и не может быть вынесен вовне? Что тогда делать случайно инициализируемым полям?
@alexgabov90
@alexgabov90 7 жыл бұрын
нраааица
@StepanVorobiov
@StepanVorobiov 3 жыл бұрын
а на JS который все так хэйтят проблемы то нет!)
@orfos
@orfos 3 жыл бұрын
42
@СтарыйФриц-с2т
@СтарыйФриц-с2т Жыл бұрын
Только что запустил єтот код и вышли разные числа
@ТимурГарифулин-ш5з
@ТимурГарифулин-ш5з 2 жыл бұрын
Если шо - на 15 мая 2022 такой проблемы не наблюдается)
@ТимурГарифулин-ш5з
@ТимурГарифулин-ш5з 2 жыл бұрын
П.С. это в .Net 6 проблем нет. в .Net Framework действительно вот такая хрень имеется...
@Daniyar86
@Daniyar86 7 жыл бұрын
Вот же вам заняться нечем XD
@gnosov
@gnosov 4 жыл бұрын
хоть бы посмотрел еще в другую сторону - /dev/random
@sergey_fetisov
@sergey_fetisov 3 жыл бұрын
А представляешь, в драйвере new Random() увидеть...
@samesadface
@samesadface 7 жыл бұрын
Потому что нужно писать так: var rnd = new Random(); for (int i = 0; i < 10; i++) WriteLine(rnd.Next()); ReadKey();
@Артем-д1г
@Артем-д1г 7 жыл бұрын
Рандома в компьютерах не бывает xD
@mk72v2oq
@mk72v2oq 7 жыл бұрын
Бывает, в линукс /dev/random например. Ну и для совсем абсолютно непредсказуемого рандома есть специальные коробочки, которые подключаются по юсб и генерируют числа на основе квантовых шумов.
@Pchelozavr
@Pchelozavr 5 жыл бұрын
@Гоша Ватюнга квантовофизический рандом будет рандомом, но ровно до того момента как не найдут эксплойт
@oleksii5138
@oleksii5138 5 жыл бұрын
Что бы знали. Не существует реальных способов получить рандомное число, все они базируются на чем-то. От времени, до количества напряжения в вашом пукане. Тогда придумали псевдогенераторы алгоритмические. Они тоже псевдо, но уже без зависимости на что-то (время\воздух\сила тока), но они так-же не детерминированные. Все они имеют такие числа как ты написал (это прирост, дефолтное значение, максимальное, и мультиплаер).
@Chakaramba
@Chakaramba 5 жыл бұрын
Ну да, это очевидно и понятно, разве не так? Вопрос то в задаче был о другом.
@ПавелКожанов-т8п
@ПавелКожанов-т8п 3 жыл бұрын
У меня нормально создает числа
@salten13
@salten13 7 жыл бұрын
Всё дело в семячке ;) чекните реализацию rand & srand - СИшные функции
@sergey_fetisov
@sergey_fetisov 3 жыл бұрын
Здесь собрались программисты бизнес-решений. А вы им про задающие числа псевдослучайных последовательностей....
@pinkmane1337
@pinkmane1337 5 жыл бұрын
Random rand1 = new Random((int)(DateTime.Now.Ticks)); for (int i = 0; i < 10; i++) { Console.WriteLine(rand1.Next(20)); }
@miker5879
@miker5879 6 жыл бұрын
мб singleton?
@АртёмЗ-ъ3у
@АртёмЗ-ъ3у 7 жыл бұрын
чуваки, это конечно интересно. но я считаю, что такие видосы надо выкладывать, когда у вас уже всё обо всём рассказано и показано. хотя хз. может быть я не прав
@Tinyismyson
@Tinyismyson 7 жыл бұрын
CLR быстро сожрал код. Добавляйте в for что-то типа Thread.Sleep(150)и получайте свой рандом
@shadowzyxi758
@shadowzyxi758 4 жыл бұрын
Это не решение а костыль.
Признаки слабого программиста
11:21
ExtremeCode
Рет қаралды 477 М.
Есть только 3 ситуации для РЕКУРСИИ
10:03
😜 #aminkavitaminka #aminokka #аминкавитаминка
00:14
Аминка Витаминка
Рет қаралды 2,2 МЛН
ПРЯМОЙ ЭФИР. Золотой мяч France Football 2024
4:41:06
Самая ВАЖНАЯ часть .NET
13:48
ExtremeCode
Рет қаралды 183 М.
JWT авторизация. Основы JWT - механизма.
6:45
Хочу вАйти
Рет қаралды 13 М.
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
ExtremeCode
Рет қаралды 555 М.
C#. Covariance and Contravariance in generic interfaces.
6:35
ExtremeCode
Рет қаралды 82 М.
Вся суть ассемблера за одно видео
8:51
Тайна числа 1.618034 - самое ВАЖНОЕ число в мире
11:45
Удивительные Факты
Рет қаралды 4,3 МЛН