Spec-Zone.ru › OpenJDK 17

Класс Random

java.lang.Object
java.util.Random
Все реализованные интерфейсы:
Serializable, RandomGenerator
Прямые известные подклассы:
SecureRandom, ThreadLocalRandom
public class Random extends Object implements RandomGenerator, Serializable
Экземпляр этого класса используется для генерации потока псевдослучайных чисел; его период составляет только 248. Класс использует 48-битный seed, который модифицируется с помощью линейной конгруэнтной формулы. (См. Дональд Э. Кнут, Искусство программирования, том 2, третье издание: Алгоритмы для работы с получисленными данными, раздел 3.2.1.)

Если два экземпляра Random создаются с одинаковым seed и выполняются одинаковые последовательности вызовов методов для каждого, они будут генерировать и возвращать одинаковые последовательности чисел. Для обеспечения этого свойства для класса Random указаны определенные алгоритмы. Java-реализации должны использовать все показанные здесь алгоритмы для класса Random, ради абсолютной переносимости Java-кода. Однако подклассы класса Random могут использовать другие алгоритмы, при условии соблюдения общих контрактов для всех методов.

Алгоритмы, реализованные классом Random используют утилиту protected, которая на каждом вызове может предоставить до 32 псевдослучайно сгенерированных бита.

Во многих приложениях метод Math.random() будет проще в использовании.

Экземпляры java.util.Random потокобезопасны. Однако одновременное использование одного и того же экземпляра java.util.Random в нескольких потоках может столкнуться с конкуренцией и, как следствие, с низкой производительностью. Вместо этого рассмотрите использование ThreadLocalRandom в многопоточных проектах.

Экземпляры java.util.Random не являются криптографически безопасными. Вместо этого рассмотрите использование SecureRandom для получения криптографически безопасного генератора псевдослучайных чисел для использования в приложениях, чувствительных к безопасности.

С момента:
1.0
См. также:
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.random.RandomGenerator

RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator

Краткое описание конструкторов

Конструктор Описание
Random()
Создает новый генератор случайных чисел.
Random(long seed)
Создает новый генератор случайных чисел, используя единственный seed.

Краткое описание методов

Модификатор и тип Метод Описание
DoubleStream doubles()
Возвращает эффективно неограниченный поток псевдослучайных значений, каждое из которых между нулём (включительно) и единицей (исключительно).
DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
DoubleStream doubles(long streamSize)
Возвращает поток, генерирующий указанное количество псевдослучайных значений, каждое из которых между нулём (включительно) и единицей (исключительно).
DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
Возвращает поток, генерирующий указанное количество псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
IntStream ints()
Возвращает эффективно неограниченный поток псевдослучайных значений.
IntStream ints(int randomNumberOrigin, int randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
IntStream ints(long streamSize)
Возвращает поток, генерирующий указанное количество псевдослучайных значений.
IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
Возвращает поток, генерирующий указанное количество псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
LongStream longs()
Возвращает эффективно неограниченный поток псевдослучайных значений.
LongStream longs(long streamSize)
Возвращает поток, генерирующий указанное количество псевдослучайных значений.
LongStream longs(long randomNumberOrigin, long randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
Возвращает поток, генерирующий указанное количество псевдослучайных значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).
protected int next(int bits)
Генерирует следующее псевдослучайное число.
boolean nextBoolean()
Возвращает следующее псевдослучайное, равномерно распределённое значение из последовательности этого генератора случайных чисел.
void nextBytes(byte[] bytes)
Генерирует случайные байты и помещает их в предоставленный пользователем массив байтов.
double nextDouble()
Возвращает следующее псевдослучайное, равномерно распределённое значение между 0.0 и 1.0 из последовательности этого генератора случайных чисел.
float nextFloat()
Возвращает следующее псевдослучайное, равномерно распределённое значение между 0.0 и 1.0 из последовательности этого генератора случайных чисел.
double nextGaussian()
Возвращает следующее псевдослучайное, гауссово («нормальное») распределённое значение со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора случайных чисел.
int nextInt()
Возвращает следующее псевдослучайное, равномерно распределённое значение из последовательности этого генератора случайных чисел.
int nextInt(int bound)
Возвращает псевдослучайное, равномерно распределённое значение между 0 (включительно) и указанным значением (исключительно), взятое из последовательности этого генератора случайных чисел.
long nextLong()
Возвращает следующее псевдослучайное, равномерно распределённое значение из последовательности этого генератора случайных чисел.
void setSeed(long seed)
Устанавливает seed этого генератора случайных чисел, используя единственный seed.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе java.util.random.RandomGenerator

isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong

Подробное описание конструкторов

Random

public Random()
Создаёт новый генератор случайных чисел. Этот конструктор устанавливает начальное значение генератора случайных чисел, с высокой вероятностью отличное от любого другого вызова этого конструктора.

Random

public Random(long seed)
Создаёт новый генератор случайных чисел, используя единственное long начальное значение. Начальное значение является начальным значением внутреннего состояния генератора псевдослучайных чисел, которое поддерживается методом next(int).
Требования к реализации:
Вызов new Random(seed) эквивалентен:

 Random rnd = new Random();
 rnd.setSeed(seed);
 
Параметры:
seed - начальное значение
См. также:
  • setSeed(long)

Подробное описание методов

setSeed

public void setSeed(long seed)
Устанавливает начальное значение этого генератора случайных чисел, используя единственное long начальное значение. Общее соглашение для setSeed заключается в том, что оно изменяет состояние объекта генератора случайных чисел таким образом, чтобы оно было точно таким же, как если бы оно было только что создано с аргументом seed в качестве начального значения. Метод setSeed реализуется классом Random путём атомного обновления начального значения до
(seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
и сброса флага haveNextNextGaussian , используемого методом nextGaussian().

Реализация setSeed классом Random использует только 48 бит заданного начального значения. Однако, в общем случае, переопределённый метод может использовать все 64 бита аргумента long в качестве начального значения.

Параметры:
seed - начальное значение

next

protected int next(int bits)
Генерирует следующее псевдослучайное число. Подклассы должны переопределить этот метод, так как он используется всеми другими методами.

Общее соглашение для next заключается в том, что он возвращает значение типа int, и если аргумент bits находится в диапазоне от 1 до 32 (включительно), то столько же младших разрядов возвращаемого значения будут (приблизительно) независимо выбранными битовыми значениями, каждое из которых (приблизительно) одинаково вероятно будет 0 или 1. Метод next реализуется классом Random путём атомного обновления начального значения до

(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
и возвращает
(int)(seed >>> (48 - bits)).
. Это линейный конгруэнтный генератор псевдослучайных чисел, как определено Д. Х. Лемером и описано Дональдом Э. Кнутом в Искусство программирования, том 2, третье издание: Алгоритмы для работы с числами, раздел 3.2.1.
Параметры:
bits - случайные биты
Возвращает:
следующее псевдослучайное значение из последовательности этого генератора случайных чисел
С момента:
1.1

nextBytes

public void nextBytes(byte[] bytes)
Генерирует случайные байты и помещает их в предоставленный пользователем массив байтов. Количество сгенерированных случайных байтов равно длине массива байтов.
Определено в:
nextBytes в интерфейсе RandomGenerator
Требования к реализации:
Метод nextBytes реализуется классом Random как если бы он был:

 public void nextBytes(byte[] bytes) {
   for (int i = 0; i < bytes.length; )
     for (int rnd = nextInt(), n = Math.min(bytes.length - i, 4);
          n-- > 0; rnd >>= 8)
       bytes[i++] = (byte)rnd;
 }
Параметры:
bytes - массив байтов, который нужно заполнить случайными байтами
Исключения:
NullPointerException - если массив байтов равен null
С момента:
1.1

nextInt

public int nextInt()
Возвращает следующее псевдослучайное, равномерно распределённое int значение из последовательности этого генератора случайных чисел. Общее соглашение для nextInt заключается в том, что одно int значение генерируется псевдослучайно и возвращается. Все 232 возможных int значений генерируются с (приблизительно) равной вероятностью.
Определено в:
nextInt в интерфейсе RandomGenerator
Требования к реализации:
Метод nextInt реализуется классом Random как если бы он был:

 public int nextInt() {
   return next(32);
 }
Возвращает:
следующее псевдослучайное, равномерно распределённое int значение из последовательности этого генератора случайных чисел

nextInt

public int nextInt(int bound)
Возвращает псевдослучайное, равномерно распределённое int значение между 0 (включительно) и заданным значением (исключительно), выбранное из последовательности этого генератора случайных чисел. Общее соглашение для nextInt заключается в том, что одно int значение в указанном диапазоне генерируется псевдослучайно и возвращается. Все bound возможные значения int генерируются с (приблизительно) равной вероятностью.
Определено в:
nextInt в интерфейсе RandomGenerator
Требования к реализации:
Метод nextInt(int bound) реализуется классом Random как если бы он был:

 public int nextInt(int bound) {
   if (bound <= 0)
     throw new IllegalArgumentException("bound must be positive");

   if ((bound & -bound) == bound)  // i.e., bound is a power of 2
     return (int)((bound * (long)next(31)) >> 31);

   int bits, val;
   do {
       bits = next(31);
       val = bits % bound;
   } while (bits - val + (bound-1) < 0);
   return val;
 }

Оговорка "приблизительно" используется в предыдущем описании только потому, что следующий метод является только приблизительно беспристрастным источником независимо выбранных битов. Если бы он был идеальным источником случайных битов, то показанный алгоритм выбирал бы int значения из указанного диапазона с идеальной равномерностью.

Алгоритм немного сложный. Он отбрасывает значения, которые привели бы к неравномерному распределению (из-за того, что 2^31 не делится на n). Вероятность отбрасывания значения зависит от n. Самый худший случай - n=2^30+1, для которого вероятность отбрасывания составляет 1/2, а ожидаемое количество итераций до завершения цикла равно 2.

Алгоритм обрабатывает случай, когда n является степенью двойки, специально: он возвращает правильное количество старших битов из базового генератора псевдослучайных чисел. В отсутствие специальной обработки, правильное количество младших битов было бы возвращено. Известно, что линейные конгруэнтные генераторы псевдослучайных чисел, такие как реализованный в этом классе, имеют короткие периоды в последовательности значений их младших битов. Таким образом, этот специальный случай значительно увеличивает длину последовательности значений, возвращаемых последовательными вызовами этого метода, если n является небольшой степенью двойки.

Параметры:
bound - верхняя граница (исключительно). Должно быть положительным.
Возвращает:
следующее псевдослучайное, равномерно распределённое int значение между нулём (включительно) и bound (исключительно) из последовательности этого генератора случайных чисел
Исключения:
IllegalArgumentException - если bound не положительное
С момента:
1.2

nextLong

public long nextLong()
Возвращает следующее псевдослучайное, равномерно распределённое long значение из последовательности этого генератора случайных чисел. Общее соглашение для nextLong заключается в том, что одно long значение генерируется псевдослучайно и возвращается.
Определено в:
nextLong в интерфейсе RandomGenerator
Требования к реализации:
Метод nextLong реализуется классом Random как если бы он был:

 public long nextLong() {
   return ((long)next(32) << 32) + next(32);
 }
Поскольку класс Random использует начальное значение только с 48 битами, этот алгоритм не вернёт все возможные long значения.
Возвращает:
следующее псевдослучайное, равномерно распределённое long значение из последовательности этого генератора случайных чисел

nextBoolean

public boolean nextBoolean()
Возвращает следующее псевдослучайное, равномерно распределённое boolean значение из последовательности этого генератора случайных чисел. Общее соглашение для nextBoolean заключается в том, что одно boolean значение генерируется псевдослучайно и возвращается. Значения true и false генерируются с (приблизительно) равной вероятностью.
Определено в:
nextBoolean в интерфейсе RandomGenerator
Требования к реализации:
Метод nextBoolean реализуется классом Random как если бы он был:

 public boolean nextBoolean() {
   return next(1) != 0;
 }
Возвращает:
следующее псевдослучайное, равномерно распределённое boolean значение из последовательности этого генератора случайных чисел
С момента:
1.2

nextFloat

public float nextFloat()
Возвращает следующее псевдослучайное значение, равномерно распределённое между 0.0 и 1.0 из последовательности этого генератора псевдослучайных чисел.

Общая спецификация nextFloat заключается в том, что одно значение float, выбранное (приблизительно) равномерно из диапазона 0.0f (включительно) до 1.0f (исключительно), генерируется псевдослучайно и возвращается. Все 224 возможных значений float вида m x 2-24, где m — положительное целое число меньше 224, генерируются с (приблизительно) равной вероятностью.

Указано в:
nextFloat в интерфейсе RandomGenerator
Требования к реализации:
Метод nextFloat реализуется классом Random как если бы он был реализован следующим образом:

 public float nextFloat() {
   return next(24) / ((float)(1 << 24));
 }

Уточнение «приблизительно» используется в предыдущем описании только потому, что следующий метод является лишь приблизительно беспристрастным источником независимо выбранных битов. Если бы он был идеальным источником случайных битов, то алгоритм, показанный выше, выбирал бы значения float из указанного диапазона с идеальной равномерностью.

[В ранних версиях Java результат вычислялся неправильно как:

 return next(30) / ((float)(1 << 30));
Это, возможно, казалось бы эквивалентным, если не лучшим, но на самом деле это ввело небольшую неравномерность из-за смещения при округлении чисел с плавающей точкой: вероятность того, что младший бит мантиссы будет 0, была немного выше, чем вероятность того, что он будет 1.]
Возвращает:
следующее псевдослучайное, равномерно распределённое float значение между 0.0 и 1.0 из последовательности этого генератора псевдослучайных чисел

nextDouble

public double nextDouble()
Возвращает следующее псевдослучайное, равномерно распределённое double значение между 0.0 и 1.0 из последовательности этого генератора псевдослучайных чисел.

Общая спецификация nextDouble заключается в том, что одно значение double, выбранное (приблизительно) равномерно из диапазона 0.0d (включительно) до 1.0d (исключительно), генерируется псевдослучайно и возвращается.

Указано в:
nextDouble в интерфейсе RandomGenerator
Требования к реализации:
Метод nextDouble реализуется классом Random как если бы он был реализован следующим образом:

 public double nextDouble() {
   return (((long)next(26) << 27) + next(27))
     / (double)(1L << 53);
 }

Уточнение «приблизительно» используется в предыдущем описании только потому, что метод next является лишь приблизительно беспристрастным источником независимо выбранных битов. Если бы он был идеальным источником случайных битов, то алгоритм, показанный выше, выбирал бы значения double из указанного диапазона с идеальной равномерностью.

[В ранних версиях Java результат вычислялся неправильно как:

 return (((long)next(27) << 27) + next(27)) / (double)(1L << 54);
Это, возможно, казалось бы эквивалентным, если не лучшим, но на самом деле это привело к большой неравномерности из-за смещения при округлении чисел с плавающей точкой: вероятность того, что младший бит мантиссы будет 0, была в три раза выше, чем вероятность того, что он будет 1! Эта неравномерность, вероятно, не сильно сказывается на практике, но мы стремимся к совершенству.]
Возвращает:
следующее псевдослучайное, равномерно распределённое double значение между 0.0 и 1.0 из последовательности этого генератора псевдослучайных чисел
См. также:
  • Math.random()

nextGaussian

public double nextGaussian()
Возвращает следующее псевдослучайное, гауссово («нормально») распределённое double значение со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора псевдослучайных чисел.

Общая спецификация nextGaussian заключается в том, что одно значение double, выбранное из (приблизительно) обычного нормального распределения со средним значением 0.0 и стандартным отклонением 1.0, генерируется псевдослучайно и возвращается.

Указано в:
nextGaussian в интерфейсе RandomGenerator
Требования к реализации:
Метод nextGaussian реализуется классом Random как если бы он был реализован следующим образом:

 private double nextNextGaussian;
 private boolean haveNextNextGaussian = false;

 public double nextGaussian() {
   if (haveNextNextGaussian) {
     haveNextNextGaussian = false;
     return nextNextGaussian;
   } else {
     double v1, v2, s;
     do {
       v1 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
       v2 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
       s = v1 * v1 + v2 * v2;
     } while (s >= 1 || s == 0);
     double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
     nextNextGaussian = v2 * multiplier;
     haveNextNextGaussian = true;
     return v1 * multiplier;
   }
 }
Это использует метод полярных координат Г. Э. П. Бокса, М. Э. Мюллера и Г. Марсалья, как описано Дональдом Э. Кнутом в Искусство программирования вычислений, том 2, третье издание: Алгоритмы для чисел, раздел 3.4.1, подразд. C, алгоритм P. Обратите внимание, что он генерирует два независимых значения ценой всего одного вызова StrictMath.log и одного вызова StrictMath.sqrt.
Возвращает:
следующее псевдослучайное, гауссово («нормально») распределённое double значение со средним значением 0.0 и стандартным отклонением 1.0 из последовательности этого генератора псевдослучайных чисел

ints

public IntStream ints(long streamSize)
Возвращает поток, производящий заданное streamSize количество псевдослучайных int значений.

Значение псевдослучайного int генерируется так, как если бы оно было результатом вызова метода nextInt().

Указано в:
ints в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
Возвращает:
поток псевдослучайных int значений
Исключения:
IllegalArgumentException - если streamSize меньше нуля
С:
1.8

ints

public IntStream ints()
Возвращает эффективно неограниченный поток псевдослучайных int значений.

Значение псевдослучайного int генерируется так, как если бы оно было результатом вызова метода nextInt().

Указано в:
ints в интерфейсе RandomGenerator
Примечание для реализации:
Этот метод реализован так, чтобы быть эквивалентным ints(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных int значений
С:
1.8

ints

public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
Возвращает поток, производящий заданное streamSize количество псевдослучайных int значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного int генерируется как если бы оно было результатом вызова следующего метода с началом и границей:

 
 int nextInt(int origin, int bound) {
   int n = bound - origin;
   if (n > 0) {
     return nextInt(n) + origin;
   }
   else {  // range not representable as int
     int r;
     do {
       r = nextInt();
     } while (r < origin || r >= bound);
     return r;
   }
 }
Указано в:
ints в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных int значений, каждое с заданным началом (включительно) и границей (исключительно)
Исключения:
IllegalArgumentException - если streamSize меньше нуля, или randomNumberOrigin больше или равно randomNumberBound
С:
1.8

ints

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных int значений, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного int генерируется как если бы оно было результатом вызова следующего метода с началом и границей:

 
 int nextInt(int origin, int bound) {
   int n = bound - origin;
   if (n > 0) {
     return nextInt(n) + origin;
   }
   else {  // range not representable as int
     int r;
     do {
       r = nextInt();
     } while (r < origin || r >= bound);
     return r;
   }
 }
Указано в:
ints в интерфейсе RandomGenerator
Примечание для реализации:
Этот метод реализован так, чтобы быть эквивалентным ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных int значений, каждое с заданным началом (включительно) и границей (исключительно)
Исключения:
IllegalArgumentException - если randomNumberOrigin больше или равно randomNumberBound
С:
1.8

longs

public LongStream longs(long streamSize)
Возвращает поток, производящий заданное streamSize количество псевдослучайных long значений.

Значение псевдослучайного long генерируется так, как если бы оно было результатом вызова метода nextLong().

Указано в:
longs в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
Возвращает:
поток псевдослучайных long значений
Исключения:
IllegalArgumentException - если streamSize меньше нуля
С:
1.8

longs

public LongStream longs()
Возвращает эффективно неограниченный поток псевдослучайных long значений.

Значение псевдослучайного long генерируется так, как если бы оно было результатом вызова метода nextLong().

Указано в:
longs в интерфейсе RandomGenerator
Примечание для реализации:
Этот метод реализован так, чтобы быть эквивалентным longs(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных long значений
С:
1.8

longs

public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
Возвращает поток, генерирующий заданное количество псевдослучайных целых чисел типа long, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного целого числа типа long генерируется так, как если бы оно было результатом вызова следующего метода с началом и границей:

 
 long nextLong(long origin, long bound) {
   long r = nextLong();
   long n = bound - origin, m = n - 1;
   if ((n & m) == 0L)  // power of two
     r = (r & m) + origin;
   else if (n > 0L) {  // reject over-represented candidates
     for (long u = r >>> 1;            // ensure nonnegative
          u + m - (r = u % n) < 0L;    // rejection check
          u = nextLong() >>> 1) // retry
         ;
     r += origin;
   }
   else {              // range not representable as long
     while (r < origin || r >= bound)
       r = nextLong();
   }
   return r;
 }
Указано в:
longs в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целых чисел типа long, каждое с заданным началом (включительно) и границей (исключительно)
Выбрасывает:
IllegalArgumentException - если streamSize меньше нуля или randomNumberOrigin больше или равно randomNumberBound
С:
1.8

longs

public LongStream longs(long randomNumberOrigin, long randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных целых чисел типа long, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного целого числа типа long генерируется так, как если бы оно было результатом вызова следующего метода с началом и границей:

 
 long nextLong(long origin, long bound) {
   long r = nextLong();
   long n = bound - origin, m = n - 1;
   if ((n & m) == 0L)  // power of two
     r = (r & m) + origin;
   else if (n > 0L) {  // reject over-represented candidates
     for (long u = r >>> 1;            // ensure nonnegative
          u + m - (r = u % n) < 0L;    // rejection check
          u = nextLong() >>> 1) // retry
         ;
     r += origin;
   }
   else {              // range not representable as long
     while (r < origin || r >= bound)
       r = nextLong();
   }
   return r;
 }
Указано в:
longs в интерфейсе RandomGenerator
Замечание по реализации:
Этот метод реализован, чтобы быть эквивалентным longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных целых чисел типа long, каждое с заданным началом (включительно) и границей (исключительно)
Выбрасывает:
IllegalArgumentException - если randomNumberOrigin больше или равно randomNumberBound
С:
1.8

doubles

public DoubleStream doubles(long streamSize)
Возвращает поток, генерирующий заданное количество псевдослучайных чисел с плавающей точкой двойной точности, каждое из которых находится в диапазоне от нуля (включительно) до единицы (исключительно).

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

Указано в:
doubles в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
Возвращает:
поток значений с плавающей точкой двойной точности
Выбрасывает:
IllegalArgumentException - если streamSize меньше нуля
С:
1.8

doubles

public DoubleStream doubles()
Возвращает эффективно неограниченный поток псевдослучайных чисел с плавающей точкой двойной точности, каждое из которых находится в диапазоне от нуля (включительно) до единицы (исключительно).

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

Указано в:
doubles в интерфейсе RandomGenerator
Замечание по реализации:
Этот метод реализован, чтобы быть эквивалентным doubles(Long.MAX_VALUE).
Возвращает:
поток псевдослучайных значений с плавающей точкой двойной точности
С:
1.8

doubles

public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
Возвращает поток, генерирующий заданное количество псевдослучайных чисел с плавающей точкой двойной точности, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного числа с плавающей точкой двойной точности генерируется так, как если бы оно было результатом вызова следующего метода с началом и границей:

 
 double nextDouble(double origin, double bound) {
   double r = nextDouble();
   r = r * (bound - origin) + origin;
   if (r >= bound) // correct for rounding
     r = Math.nextDown(bound);
   return r;
 }
Указано в:
doubles в интерфейсе RandomGenerator
Параметры:
streamSize - количество значений для генерации
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных значений с плавающей точкой двойной точности, каждое с заданным началом (включительно) и границей (исключительно)
Выбрасывает:
IllegalArgumentException - если streamSize меньше нуля, или randomNumberOrigin не является конечным, или randomNumberBound не является конечным, или randomNumberOrigin больше или равно randomNumberBound
С:
1.8

doubles

public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
Возвращает эффективно неограниченный поток псевдослучайных чисел с плавающей точкой двойной точности, каждое из которых соответствует заданному началу (включительно) и границе (исключительно).

Значение псевдослучайного числа с плавающей точкой двойной точности генерируется так, как если бы оно было результатом вызова следующего метода с началом и границей:

 
 double nextDouble(double origin, double bound) {
   double r = nextDouble();
   r = r * (bound - origin) + origin;
   if (r >= bound) // correct for rounding
     r = Math.nextDown(bound);
   return r;
 }
Указано в:
doubles в интерфейсе RandomGenerator
Замечание по реализации:
Этот метод реализован, чтобы быть эквивалентным doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Параметры:
randomNumberOrigin - начало (включительно) каждого случайного значения
randomNumberBound - граница (исключительно) каждого случайного значения
Возвращает:
поток псевдослучайных значений с плавающей точкой двойной точности, каждое с заданным началом (включительно) и границей (исключительно)
Выбрасывает:
IllegalArgumentException - если randomNumberOrigin больше или равно randomNumberBound
С:
1.8

© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Random.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API