Насколько я понимаю, генератор псевдослучайных чисел просто берет некоторое число (начальное число), хеширует его с помощью набора значений XOR и битовых сдвигов, а затем выплевывает действительно длинное число, из которого можно получить остаток, чтобы получить ваше «случайное число». » число.
Теперь, как правило, вы бы использовали time(NULL)
как семя для rand () в C / C ++. Тем не мение, time(NULL)
только увеличивается каждую секунду, а не каждую миллисекунду. Так как же тогда я могу за цикл rand()
тысячу раз менее чем за одну секунду и все еще получают разные числа в качестве выходных данных, если начальное число остается тем же time(NULL)
значение?
rand()
использует предыдущее случайное значение в качестве нового начального числа при последующих вызовах. Вот почему уникальная случайная последовательность значений будет сгенерирована, когда вы начнете с другого начального значения.
Генератор псевдо чисел выводит детерминированный ряд чисел в определенном диапазоне, которые должны выглядеть случайными.
time(NULL)
является так называемым семенем ГСЧ и сообщает ему, где в серии начать. Вы должны сделать это только один раз для каждой программы.
Кстати, rand()
это не современный C ++. Увидеть Вот почему и что делать вместо этого.
Для компиляторов C / C ++ характерно использование линейный конгруэнтный генератор для ранда ().