metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-04 11:05 am

Random в .NET

Посетила мысль, что я не совсем понимаю, из каких соображений класс Random в дотнете не сделан статическим. Создавать экземпляры генераторов случайных чисел с разными начальными значениями, что-ли?

[identity profile] nicka-startcev.livejournal.com 2012-10-04 08:09 am (UTC)(link)
Карта в Элите именно так делается. И названия планет тоже. И все их экономические параметры. А хранить достаточно один только рандом сид.

[identity profile] palm-mute.livejournal.com 2012-10-04 08:17 am (UTC)(link)
ну вообще-то логично, ибо есть разные алгоритмы генерации, и теоретически должно быть возможно подсунуть реализацию, читающую из /dev/random и не знающую ничего о начальных значениях.

[identity profile] palm-mute.livejournal.com 2012-10-04 08:59 am (UTC)(link)
а еще не забываем о тредах и синхронизации

[identity profile] vp.livejournal.com 2012-10-04 08:21 am (UTC)(link)
думаю, да

[identity profile] molnij.livejournal.com 2012-10-04 08:36 am (UTC)(link)
Чтобы можно было создать рандомное число рандомных генераторов и в рандомном порядке читать из них рандомы!

[identity profile] bydlorus.livejournal.com 2012-10-04 08:41 am (UTC)(link)
Осторожно, так в компьютере может и жизнь появиться!

[identity profile] feorex.livejournal.com 2012-10-04 08:46 am (UTC)(link)
А зачем static? В каждый последующий вызов Next() передавать предыдущее рандомное значение? А вдруг я где-нибудь ошибусь, и буду передавать одно и то же значение?

[identity profile] altmind.livejournal.com 2012-10-04 04:42 pm (UTC)(link)
в хаскелях вроде бы так

[identity profile] w00dy.livejournal.com 2012-10-04 08:54 am (UTC)(link)
тю ребе, тут жеж всё написано. Одинаковый сид даёт одинаковые последовательности, для удобства.

[identity profile] denis dmitriev (from livejournal.com) 2012-10-04 08:59 am (UTC)(link)
Плюсую. Очень удобно тестить, если валиться где-то внутре в зависимости от цен на дрова в бухте Дикси.
Или, к примеру, некая структура генериться рандомом и ошибка вылезает только на некоторых вариантах.
Всобачил одинаковый сид и повторяй себе до усрачки.

[identity profile] berezovsky.livejournal.com 2012-10-04 09:02 am (UTC)(link)
То, что одинаковый сид даёт одинаковые последовательности, полезно для какой-нибудь мрачной отладки.
Тем более, если эта последовательность из объектов разных типов. Ихний рандом такое позволяет, хотя хз, встречается ли такое на практике.

[identity profile] jakobz.livejournal.com 2012-10-04 09:14 am (UTC)(link)
Концептуально оно правильнее - разные куски программы не должны никак быть завязаны между собой, в том числе и через генератор случайных чисел.

Плюс, вероятно, со статиком им бы как-то пришлось разруливать многопоточность, а так это проблема программиста.

[identity profile] bydl0coder.livejournal.com 2012-10-04 09:34 am (UTC)(link)
Да. Но нужно было добавить к нему пару статических методов, когда по фигу, какой seed.

[identity profile] freiksenet.livejournal.com 2012-10-04 09:34 am (UTC)(link)
Сид же. И нужен стейт, чтобы знать на каком месте в последовательности ты сейчас находишься. Можно в хаскеле посмотреть, там всё просто и понятно.

[identity profile] zamotivator.livejournal.com 2012-10-04 12:28 pm (UTC)(link)
Да. Нужно бывает в тестировании, например.

[identity profile] sbj-ss.livejournal.com 2012-10-04 07:51 pm (UTC)(link)
Ну а чего, вспомнилось из жизни. Надо было каждому сеансу пользователя приписать свой идентификатор. О безопасности речи в данном контексте не идёт. Во времена MS SQL 2000 использовалась newid(), но это десятикратное падение производительности. Переписано на random, причём на собственный - т.е. с наличием таблички состояния. Достоинство: а понятно вроде.
Была такая весёлая задачка: на Трубо Паскакале зажечь рандомные точки на экране и погасить назад, не используя память. Через randseed, да. А глобальный генератор не дал бы удалить триггер, он следит за флажком глобальности.
И вообще в базе можно сделать много больше, чем люди привыкли делать :)