2013-06-26 2 views
7

Мне нужно отправить идентичную последовательность случайных чисел в распределенную сеть приложений.Деривативная генерация случайных чисел в системах

Поскольку такая последовательность может быть довольно длинной, я думал о отправке только (случайным образом) централизованного номера инициализации семян и длины требуемой последовательности.

Учитывая, что каждый компонент получающей стороны будет использовать одну и ту же версию .NET, может ли это быть жизнеспособным решением для получения одинаковых случайных данных на всех моих узлах?

+1

См http://stackoverflow.com/questions/17094189/crossplatform-random-number-generator – drch

+0

Спасибо за указателем. Не могли бы вы написать это как ответ, чтобы я мог отметить, как принято? – Andrea

ответ

9

Вы должны иметь возможность распространять семя для Random (int seed) и воссоздавать одну и ту же последовательность, предполагая, что вы используете ту же версию .NET во всех средах.

Remarks on System.Random @ MSDN

Примечания к Вызывающие Реализация генератора случайных чисел в Случайные класс не гарантированно остаются неизменными во всех основных версиях .NET Framework. В результате ваш код приложения не должен предполагать, что одно и то же семя приведет к тому же псевдослучайной последовательности в разных версиях .NET Framework.

Если вы видите случай, когда версия каркаса изменится или вам может понадобиться восстановить старую последовательность после того, как вы начали использовать новую версию, вы захотите создать свою собственную случайную реализацию.

Смотрите ответы этого вопроса для указателей: Crossplatform random number generator

1

Вы можете использовать класс Random с семенами или использовать сервис-ориентированную архитектуру.

Random при инициализации семенами будет иметь идентичную последовательность.

+2

Существует серьезная оговорка к этому, о которой ранее говорилось о SO. См. Ответ д-ра. – jerry