Почему генератор случайных чисел Math.random в Google Chrome не *такой* случайный?

Сегодня я столкнулся со странной "ошибкой", когда запускал модульные тесты в разных браузерах. До сегодняшнего дня я много раз запускал тесты в Firefox и даже в IE, но, видимо, еще не в Chrome (v19-dev). Когда я запускал их в Chrome, он постоянно терпел неудачу в одном тесте, потому что два значения, которые я вычислял, не совпадали.

Когда я действительно углубился в происходящее, я понял, что проблема заключалась в том, что я предполагал, что если бы я заполнил массив 100 000 Math.random() значениями, все они были бы уникальными (не было бы не должно быть столкновений). Оказалось, что в Chrome это не так.

В Chrome я постоянно получал как минимум две пары значений, которые совпадали из 100 000. Firefox и IE9 никогда не сталкиваются. Вот jsfiddle, который я написал только для тестирования, который создает 1M Math.random() записей в массиве: http://jsfiddle.net/pseudosavant/bcduj/

Кто-нибудь знает почему генератор псевдослучайных чисел Chrome, который используется для Math.random, на самом деле не та случайный? Похоже, это может иметь последствия для любых процедур шифрования js на стороне клиента, которые когда-либо использовали Math.random.

14
задан pseudosavant 3 March 2012 в 23:29
поделиться