Как C / C ++ rand () может генерировать случайные числа так быстро?

Насколько я понимаю, генератор псевдослучайных чисел просто берет некоторое число (начальное число), хеширует его с помощью набора значений XOR и битовых сдвигов, а затем выплевывает действительно длинное число, из которого можно получить остаток, чтобы получить ваше «случайное число». » число.

Теперь, как правило, вы бы использовали time(NULL) как семя для rand () в C / C ++. Тем не мение, time(NULL) только увеличивается каждую секунду, а не каждую миллисекунду. Так как же тогда я могу за цикл rand() тысячу раз менее чем за одну секунду и все еще получают разные числа в качестве выходных данных, если начальное число остается тем же time(NULL) значение?

3

Решение

rand() использует предыдущее случайное значение в качестве нового начального числа при последующих вызовах. Вот почему уникальная случайная последовательность значений будет сгенерирована, когда вы начнете с другого начального значения.

11

Другие решения

Генератор псевдо чисел выводит детерминированный ряд чисел в определенном диапазоне, которые должны выглядеть случайными.

time(NULL) является так называемым семенем ГСЧ и сообщает ему, где в серии начать. Вы должны сделать это только один раз для каждой программы.

Кстати, rand() это не современный C ++. Увидеть Вот почему и что делать вместо этого.

2

Для компиляторов C / C ++ характерно использование линейный конгруэнтный генератор для ранда ().

0
По вопросам рекламы [email protected]