Числовые рецепты в C говорят, что не следует доверять встроенным генераторам случайных чисел, когда это важно. Вероятно, вы могли бы реализовать алгоритм, показанный в книге, как функцию ran1 (), которая, по ее утверждению, проходит все известные статистические тесты случайности (в 1992 году) менее чем за 10 8 вызовов.
Основная идея алгоритма ran1 () заключается в добавлении случайного числа к выходу генератора случайных чисел для уменьшения последовательных корреляций низкого порядка. Они используют перемешивание Бэйса-Дарема из раздела 3.2-3.3 в «Искусстве компьютерного программирования», том 2, но я предполагаю, что вы также можете использовать перемешивание Фишера-Йейтса .
Если вам нужно больше случайных значений, чем тот, этот же документ также предоставляет генератор (ran2), который должен быть хорош как минимум для 10 17 значений (мое предположение основано на периоде 2,3 x 10 18 ). Также имеется функция (ran3), которая использует другой метод для генерации случайных чисел, если линейные конгруэнтные генераторы доставят вам какую-то проблему.
Вы можете использовать любую из этих функций с тестом <0,5, чтобы быть более уверенным, что вы получаете равномерное распределение. </p>