В основном я хочу сгенерировать случайные числа, которые никогда не будут повторяться в течение очень длительного периода (я не хочу использовать последовательность), например, LCG, который использует Java:
synchronized protected int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
}
Насколько я понимаю, начальное число в этот случай будет повторяться только после 2 ^ 48 вызовов next, это правильно?
поэтому я понимаю, что если бы я использовал такой метод, как:
synchronized protected long next() {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return seed;
}
Начальное значение гарантированно не повторится до 2 ^ 48 вызовов?