Как стать автором
Обновить

Комментарии 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.

Вы наверное путаете с орел/решка. Когда 50/50 (за которую заминусили), тогда да, вероятность одинаковая. Но вы предлагаете 1/10 вероятность, называя ее 50/50 )

Случайность, с точки зрения безопасности, имеет значение. Я не специалист по безопасности, но, насколько я понимаю, генератор псевдослучайных чисел (ГПСЧ) считается "безопасным" в том случае, когда последовательность чисел, которую он произведет или уже произвел, не может быть вычислена злоумышленником.

По-моему, "безопасный" алгоритм должен работать от источника энтропии, все остальные алгоритмы могут быть вычислены, т.е. они псевдослучайны.

А чем классы лучше чистых функций применительно к JS ?

Чистые функции в отрыве от кода автора? В нём чистотой и не пахнет

Какая сложная и одновременно простая штука -- случайное число.

Когда нужно чтобы число "казалось" случайным достаточно использовать некий математический алгоритм, например ЛКМ https://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод

А когда нужно чтобы число было "заранее непредсказуемым" нужно использовать информацию взятую вне системы, иначе условны недоброжелатель сможет повторить вычисления.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории