Другие языки программирования и технологии

Как организовать псевдослучайные числа ?

Если есть какие-то возражения против стандартной функции, можно написать свою. Детальный разбор алгоритмов получения псевдослучайных чисел есть в третьем томе Кнута.
ВМ
Вальдемар Майоров
57 956
Лучший ответ
А чего вы капризничаете? Во всех яп есть генератор псч. Если вы хотите нечто альтернативное, то и выражайтесь конкретнее
Павел Греков не во всех
Использовать встроенную в твой язык программирования функцию. И она там 100% есть.

А если самому, то, например, берешь текущие дату/время в виде текстовой строки, считаешь хеш этой строки (md5, или sha1), берешь нужное кол-во 16-ричных цифр из средины получившегося хеша и преобразовываешь их в число.
Павел Греков КАК это сделать, не надо готовое решение
Из системного времени оно получается, если вам нужно знать, как оно работает.
Помнится для программируемых калькуляторов 80-х годов применялись методы генерации случайных чисел в диапазоне 0, 1: задается наугад первое число x (0<x<1), а следующие получались из предыдущего по формуле x= Д (11х+Пи), где Д означает дробная часть числа. Для получения чисел в диапазоне a,b =a+(b-a)x
Джиоев Олег
Джиоев Олег
83 844
Тут посмотрите: http://habrahabr.ru/post/132217/
Вабчета, не очень простая задача, если серьезно подходить. Есть прикольный способ: брать коды символов, из осмысленного текста, и нормировать, как надо. Тока текстовый файл с настоящим, связанным текстом, не программный код.
Стас Сидоренко На хабре чувак мутил генератор, снимая шумы со звуковой карты. Никаких текстов не нужно. Хотя одной книгой "Война и Мир" можно дофига псевдорандома накрутить =)
Берёшь какое-нибудь неадекватное число:
unsigned int seed = 87578954;
И еще одно, чтобы растянуть время до повтора значений на подольше и делаешь с ним шляпу какую-нибудь, чтобы оно отличалось от папки:
unsigned int old_seed = (seed>>4) * (seed>>11);
( >> и << побитовый сдвиг, загугли если что)
Творишь с seed всякие непотребства:
seed = (seed*seed)%123456;
(% - остаток от деления)
В принципе в seed уже что-то вроде рандома валяется, можешь забирать от него остаток для личных целей, повторяя предыдущую операцию перед каждым вызовом.
И добавляешь условие (тоже со всякой фигней):
if (seed<1000) { seed = (old_seed*old_seed)>>4 + seed*old_seed + old_seed<<8; old_seed = (old_seed* old_seed) % 592394; }

Никакой криптостойкости, но и никакого гемора со сложными алгоритмами + достаточно долгий проход до повторения серии.
Akylbek Orozaliev
Akylbek Orozaliev
16 778