PDA

Просмотр полной версии : Random. Как, собственно, он работает в общих чертах?


Contemplator
08.10.2010, 14:10
Вчера в голову взбрело: а как собственно он работает в общих чертах? т.е. как проходит выборка случайного (ну да, да, - псевдо-случайного, - не в этом суть) из диапазона? =))
Мат. подоплёка какая? =))

Psycho Tiger
08.10.2010, 14:25
Ну нужен какой-то seed чтобы начать генерировать случайные числа. Этот seed калькулируется из системного времени. А потом крутится вертится и вот.

drnet_ua
08.10.2010, 14:25
самый простой вариант:
RandSeed = любое число в диапазоне (0..1)
NextRandom = RandSeed;

следующее "случайное число":
NextRandom = ДробнаяЧасть((RandSeed+random)*(RandSeed+random));
NextRandom = ДробнаяЧасть( (1+NextRandom) * (1+NextRandom) );

но это самый простейший вариант :)

люди придумали все намного сложнее, нам на числовых методах очень нахваливали этот (http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0_%D1%81_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D0%BE%D0%B1%D 1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%D1%8E)

Aiswer
08.10.2010, 21:57
Да можно сделать полную случайность, которая равна что-то типа 0.000000000001, но такое мне кажется глупо. Лучше привязывать событие к католичеству попыток/действий, типа 1 к 1000, и точно знать что 1 к 1000 будет. (:

drnet_ua
08.10.2010, 22:06
мысль непонятна

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

далее вся эта кухня подчиняется законам распределения, у разных генераторов она разная, попытка "логически" привести одно распределение к другому ни к чему не хорошему приведет :) я пробывал

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