В выражении:
double randomDouble = Integer.MAX_VALUE + rand.nextInt((max - min) + 1);
правая часть выражения сначала назначит сумму целому числу, затем этот результат будет приведен к удвоению. Поскольку добавление чего-либо к Integer.MAX_VALUE
приведет к переполнению, в результате вы получите отрицательное число, поскольку знаковый бит переворачивается как часть переполнения.
Если вы хотите удвоить, просто бросьте MAX_VALUE
на double
:
double randomDouble = (double)Integer.MAX_VALUE + (double)rand.nextInt((max - min) + 1);
Теперь в этом случае вы получаете то, что хотите, потому что вы добавляете случайное число к двойному значению, которое имеет наибольшее значение типа int, которое не приближается к пределу для того, что может хранить двойное число.
Демо