Java генерирует «случайные» числа, которые не повторяются в течение периода 2 ^ 48

В основном я хочу сгенерировать случайные числа, которые никогда не будут повторяться в течение очень длительного периода (я не хочу использовать последовательность), например, 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 вызовов?

5
задан Oscar Gomez 24 June 2011 в 04:39
поделиться