Мой вопрос касается 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 случайных чисел. Я знаю, что это немного странно, но мне каждый раз требуется новый генератор случайных чисел в моем реальном проекте. Семя, которое я получаю, является последовательным. Первый сгенерированный случайный дубль чрезвычайно близок для любого из начальных чисел, это из-за линейной конгруэнтной формулы, которая используется в качестве инициализации?
Второй сгенерированный дубль на самом деле выглядит так, как будто он действительно случайный, можно ли так предположить? Можно ли сначала сгенерировать неиспользуемое случайное число, а после этого начать использовать его по той причине, по которой оно было создано?
заранее спасибо
РЕДАКТИРОВАТЬ:
Позвольте мне уточнить:
int possibleRoutes = 7;
void handlePacket(Packet p) {
int chosenRoute = p.hash % possibleRoutes;
// ...Other code...
}
vs.
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}
}
vs.
int possibleRoutes = 7;
void handlePacket(Packet p) {
Random r = new Random(p.hash);
r.nextInt();
int chosenRoute = r.nextInt() % possibleRoutes;
// ...Other code...
}
Гарантия заключается в том, что каждый пакет должен идти по одному и тому же маршруту. В настоящий момент хэш пакета по своей сути является последовательным. Существует слишком много возможных хэшей, чтобы сохранять любой тип состояния для ускорения.