Я предлагаю вам использовать библиотеку Uncommons Maths , которая включает в себя различные случайные генераторы (например, Mersenne Twister, на основе AES) и дистрибутивы (пуассоновские, гауссовы и т. Д.)
Что касается «двойной проблемы»: почти все случайные генераторы генерируют двойные, потому что они наиболее часто используются. Если вам нужны целые числа, вам нужно сделать округление самостоятельно (достаточно будет позвонить на Math.round ). Допустим, вы генерируете случайные высоты людей с точностью до сантиметра: если ваш генератор случайных чисел возвращает 175,234, вы можете просто округлить его до 175. Это действительно не проблема.
Что касается пределов для экспоненциального распределения: не существует генераторов, которые позволили бы вам выбирать предельные значения, поскольку таких ограничений для экспоненциального распределения не существует. Экспоненциальное распределение обычно моделирует задержки между двумя последовательными событиями в пуассоновском процессе: задержка может быть всего 0 или может быть чрезвычайно высокой. Чрезвычайно высокие результаты действительно маловероятны, но они не являются невозможными. Вы можете решить эту проблему, получив случайное число от генератора, добавив свой нижний предел и используя Math.max , чтобы обрезать его, если оно превышает ваш верхний предел. Но это уже не экспоненциальное распределение.