Проще всего это можно сделать, короткие записи другого ПГСЧ или с использованием библиотеки, было бы просто использовать все биты, один вызов rand()
дает вам. Большинство генераторов случайных чисел можно разбить на поток бит, который имеет определенную случайность и статистические свойства. Отдельные биты, равномерно распределенные по этому потоку, не обязательно должны иметь одинаковые свойства. По сути, вы выбрасываете между 14 и 31 бит псевдослучайности.
Вы можете просто кэшировать сгенерированный номер вызовом rand()
и использовать каждый бит его (в зависимости от количества битов rand()
дает вам, конечно, что будет зависеть от RAND_MAX
). Поэтому, если ваш RAND_MAX
32768, вы можете использовать младшие 15 бит этого числа в последовательности. Особенно, если RAND_MAX
- это то, что вы не имеете дело с младшими битами генератора, поэтому получение бит с высокого уровня не принесет вам многого. Например, Microsoft ЭЛТ генерирует случайные числа с уравнением
хп + 1 =хн & Мидот; 214013 + 2531011
, а затем сдвигает 16 бит этого младшего разряда и ограничивает его до 15 бит. Таким образом, никакие младшие разряды от генератора отсутствуют. Это в основном справедливо для генераторов, где RAND_MAX
достигает 2 , но вы не можете рассчитывать на это иногда (так что, возможно, вы можете ограничить себя 16 или 24 битами, взятыми из верхнего разряда).
Итак, как правило, просто кешируйте результат вызова rand()
и используйте биты этого номера в последовательности для вашего приложения, а не rand() % 2
.
Просто из любопытства, насколько «большой» является вашим массивом? если его мало, вы можете не видеть много случайности. – GrayWizardx
Можете ли вы показать код? Возможно, что-то просто отвратительно с тем, как вы посеяны, и поэтому он, похоже, имеет последовательную структуру. –
«rand()% 2» даст намного лучшие результаты. –