Мне нужно генерировать произвольно большие случайные числа в диапазоне 0 (включительно) до n (исключая). Моя первоначальная мысль состояла в том, чтобы вызвать nextDouble
и умножить на n, но как только n будет больше, чем 2 53 результаты больше не будут равномерно распределены.
BigInteger
имеет следующий конструктор:
public BigInteger(int numBits, Random rnd)
Создает случайно генерируемый BigInteger, равномерно распределенный в диапазоне от 0 до (2 numBits - 1) включительно.
Как это можно использовать для получения случайного значения в диапазоне 0 - n, где n не является степенью 2?