Да, вы можете использовать один экземпляр Random
. Реализация поддержки для nextGaussian()
- Box, Muller, & Полярный метод Марсалья, который генерирует гауссианы попарно. Первый вызов будет сгенерировать пару и вернуть первое из двух значений, следующий вызов просто вернет ранее сгенерированное второе значение. Эти пары являются математически независимыми (*), если имеются одинаковые входы. Теоретически это может быть проблемой, если униформа исходит из линейного конгруэнтного генератора с плохой структурой решетки, но LCG Java довольно приличный, и на практике результаты могут считаться эффективными независимо для большинства применений.
Более важный вопрос: почему вам нужны два разных метода, чтобы быть источниками гауссовых? Что вы получаете, что просто позвонить rand.nextGaussian()
не получится?
(*) - значения возврата Гаусса представляют собой синусоидальные составляющие вектора, генерируемого в полярных координатах, и поэтому ортогональны. Для гауссианов ортогональность влечет независимость.
Я написал этот образец для простоты. Фактически, я использую один метод утилиты из нескольких точек моей программы. Каждая точка программы вызывает случайный метод полезности с разной частотой. Поэтому я хотел бы понять, могу ли я получить нормальное распространение в каждом случае, или вызовы из разных мест будут влиять друг на друга. –