Что было бы хорошим способом для генерации 16-битных случайных чисел в Visual C++?

Я пытаюсь создать длинный (= 2^31) список из 32 и 16-битных случайных чисел. Для 32 бит я использую lfsr113_Bits() из реализации rand(), но я не уверен, что было бы лучшим способом получить качественную последовательность из 16 битных чисел.

К сожалению, включение в rand() является немного коротким, поскольку согласно документации: "Функция rand возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX (32767).

Я думаю об использовании lfsr113_Bits() и объединения для получения 16-битных чисел, используя:

union {
    uint16  i16[2];
    uint32  i32;
} u; 

u.i32 = lfsr113_Bits(); 

А затем используйте число от u.i16[0] или u.i16[1], или, возможно, от обоих, один за другим, но у меня есть ощущение, что последовательности, полученные таким образом, могут быть значительно хуже, чем последовательности, полученные с помощью используя собственный 16-битный генератор.

Любая идея о том, что будет лучшим подходом для генерации 16-битных случайных чисел?

0 ответов

Другие вопросы по тегам