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