Мой вопрос касается Java RNG; используйте следующий код:Поселение Java RNG
for (int s = 0; s < 600; s++) {
Random r = new Random(s);
System.out.println(r.nextDouble());
System.out.println(r.nextDouble() + "\n-----");
}
Это приведет к генерации 600 случайных чисел. Я знаю, что это немного странно, но каждый раз в моем реальном проекте требуется новый генератор случайных чисел. Семя, которое я получаю, является последовательным. Первый случайный двойник, который генерируется, чрезвычайно близок для любого из семян, это из-за линейной конгруэнтной формулы, которая используется как инициализация?
Вторая двойная сгенерированная на самом деле выглядит так, как будто она на самом деле правильно случайна, безопасно ли это считать? Хорошо ли практиковать сначала генерировать неиспользуемое случайное число, и после этого момента начать использовать его по той причине, что он был создан?
Спасибо заранее
EDIT:
Позвольте мне уточнить:
int possibleRoutes = 7;
void handlePacket(Packet p) {
int chosenRoute = p.hash % possibleRoutes;
// ...Other code...
}
против
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}
}
против
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
r.nextInt();
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}
гарантия, что каждый пакет должен взять тот же маршрут. Хэш пакета является неотъемлемо последовательным на данный момент. Есть слишком много возможных хешей, чтобы поддерживать любое состояние, чтобы ускорить это.
Я не получить это использование. У государства PRNG есть состояние. Просто создайте один (за пределами, если вам нужно, в зависимости от времени) и образец в цикле. Второй вызов будет основан на другом состоянии как первом. Нет необходимости в подсевке. (повторение в пределах цикла - это плохая практика практически во всех случаях использования). Бросание проводов RNG-номера также выполняются только в очень сложных условиях и не являются подходом к преследованию здесь. – sascha
Чтобы быть в безопасности: скажите нам, зачем вам нужен новый PRNG-объект в каждом цикле (если это то, что вы хотите), или если вам нужны только новые номера при каждом вызове программы. – sascha
Почему вы думаете, что на каждой итерации нужен генератор случайных чисел? Подобные заявления часто отражают глубокий уровень недоразумений в отношении ПРНГ. – pjs