Комментарии 14
Отличная статья о том как "проверять" рандом
Только я бы еще добавил цветовую дифференциацию и запускал бы параллельно в нескольких потоках (которые отличаются цветом). За js не скажу но в некоторых языках программирования как раз асинхрон показывает кривизну рандома. Может оказатся что для одновременных запросов одно и то же число выдает.
А я думал нужно запустить рандом множество раз и убедиться, что с большим количеством попыток, становится равномернее распределение цифр.
А тут оказывается достаточно было один раз запустить и внешне посмотреть. Так сказать проверка генератора случайных чисел на глазок.
Может оказатся что для одновременных запросов одно и то же число выдает.
Таким грешат генераторы черпающие энтропию в системном времени.
В этом «равномернее» убедиться тоже очень непросто, как и выбрать из разных видов «равномерности».
Например, можно считать ГСЧ очень хорошим, а потом рассмотреть выдаваемые числа как координаты точек в пятимерном пространстве, и окажется, что все точки легли на одну плоскость.
Но придумывать с нуля ничего не надо, есть разнообразные тесты ГСЧ, начиная с хорошо известных Diehard tests.
вероятность того, что подряд появятся два одинаковых значения, равна вероятности того, что подряд появятся два разных значения
Вероятность первого - 1/10, вероятность второго - 9/10. Или я что-то не так понимаю?
50/50 - либо появится, либо не появится ))
Например, вероятность того, что в одном ряду появятся два одинаковых значения подряд, равна вероятности того, что в одном ряду появятся два разных значения подряд.
Спасибо за замечание, я думаю, так правильнее.
Т.е. вероятность получить 88 точно такая же как и у 80,81,82,83,84,85,86,87,89
Вы ничего не путаете ?
Имеется в виду не это, а то, что в ряду (который на картинке изображен) вероятность того, что появится хотя бы одна пара одинаковых значений такая же, как появление хотя бы одной пара разных значений.
Вот выдержка с оригинала:
For example, having two of the same values generated in a row is the same exact probability of having any two values generated in a row.
Случайность, с точки зрения безопасности, имеет значение. Я не специалист по безопасности, но, насколько я понимаю, генератор псевдослучайных чисел (ГПСЧ) считается "безопасным" в том случае, когда последовательность чисел, которую он произведет или уже произвел, не может быть вычислена злоумышленником.
По-моему, "безопасный" алгоритм должен работать от источника энтропии, все остальные алгоритмы могут быть вычислены, т.е. они псевдослучайны.
На дворе 2024 год, кто-то до сих пор использует var и пишет function ObjectCreator вместо class...
Какая сложная и одновременно простая штука -- случайное число.
Когда нужно чтобы число "казалось" случайным достаточно использовать некий математический алгоритм, например ЛКМ https://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод
А когда нужно чтобы число было "заранее непредсказуемым" нужно использовать информацию взятую вне системы, иначе условны недоброжелатель сможет повторить вычисления.
Изучение случайности в JavaScript