Как мне безопасно создать случайное целочисленное значение в определенном диапазоне?
Я знаю, что многие люди спрашивали об этом раньше, например, этот пост , нометод не кажется безопасным.Позвольте мне объяснить:
В библиотеке 'Math' есть Math.random (), который генерирует случайное значение в диапазоне [0, 1).Используя это, можно построить алгоритм типа int randomInteger = Math.floor(Math.random() * (Integer.MAX_VALUE - Integer.MIN_VALUE + 1) + Integer.MIN_VALUE)
для генерации случайного числа между Integer.MAX_VALUE и Integer.MIN_VALUE.Однако Integer.MAX_VALUE - Integer.MIN_VALUE будет переполнено.
Цель состоит не в том, чтобы просто генерировать случайные числа, а в том, чтобы генерировать их равномерно, что означает, что 1 имеет такую же вероятность появления как Integer.MAX_VALUE.Я знаю, что есть обходные пути, такие как приведение больших значений к long, но опять же проблема в том, как сгенерировать длинное целое значение из Long.MIN_VALUE в Long.MAX_VALUE.
Я тоже неуверен в других заранее написанных алгоритмах, поскольку они тоже могут переполниться и привести к изменению распределения вероятностей.Поэтому мой вопрос заключается в том, существует ли математическое уравнение, в котором используются только целые числа (без приведения ни к чему длинному) и Math.random () для генерации случайных чисел от Integer.MIN_VALUE до Integer.MAX_VALUE.Или если кто-нибудь знает какие-либо генераторы случайных чисел, которые не переполняются внутренне?
Спасибо заранее.