Рандом стал еще рандомнее в Chrome 49

Движок V8 от Google, который лежит в основе браузера Chrome, не мог похвастаться качественным генератором псевдослучайных чисел. Однако теперь его исправили.

Для наглядности результаты работы старой версии генератора и новой представили в виде вот таких диаграмм графического шума:

Результат работы генератора псевдослучайных чисел V8 до и после обновления

У генератора прошлой версии заметна тенденция к появлению горизонтальных полос, в то время как обновленный вариант покрывает выделенную область более равномерно.

Генераторы псевдослучайных чисел — пожалуй, присутствующая в любом языке программирования, составляющая, имеющая множество сфер применения: от игр до моделирования реальных физических процессов (с некоторыми особенностями). Качество генератора определяется набором нескольких характеристик, среди которых выделяются две наиболее важных: скорость генерации и «случайность». Первая важна по той причине, что в реальных задачах программирования обычно требуется сгенерировать достаточно длинные последовательности псевдослучайных чисел, поэтому на этом шаге программа не должна «подвисать». А «случайность» характеризует, насколько хорошо генерируемые значения покрывают множество допустимых значений.

Для тестирования последнего параметра применяют различные тесты, и использовавшийся ранее в V8 алгоритм MWC1616 проваливался на большинстве из них. Ныне же выбранный xorshift128+ серьезно превосходит предшественника. Кстати, период новенького составляет 2128-1, т.е. вы должны будете запустить генератор более 30 * 1037 раз, прежде чем хоть одно значение повторится.

Однако для криптографических нужд рекомендуется все-таки использовать специализированные библиотечные решения, вроде Web Cryptography API, или специальный метод getRandomValues.

Кстати, о том, как генерируются псевдослучайные числа в самом JavaScript, никто не знает… Может быть, они действительно случайны?..

i-Programmer