Borland Pascal RND

rub-makar

как он работает?
подскажите, обычный стандартный генератор в BP
не могу нигде найти

stream2008

p:=random(n);
вроде так всегда было...
Перед этим где-нибудь нужно написать
randomize;

rub-makar


а то я не понимаю...:)
я именно про этот рандомайз и спрашиваю
как функция считаетсЯ?
стандартная
просто увеличение на число вроде...
или нет?

Elina74

Рандомайз вроде пользуется системным таймером...


Randomize (procedure)
_____________________
Initializes the built-in random number generator with a random value
(obtained from the system clock).

rub-makar

таймер, насколько я понимаю, используется только для инициализации и получения первого числа
а дальше работает функция вроде
которая увеличивает число....
вот это мне и интересно... каким образом?

VitMix

Если мне не изменяет память, вместе с Borlad Pascalем поставляются исходники всех библиотек. Эти исходники отличаются понятностью и хорошей комментированностью. Думаю функция random не очень длинная и разобраться с ней не составит труда.

stream2008

По непроверенным агентурным данным она работает так:
randx:=(randx*25173+13849) mod 65536;
А вообще - могу поискать исходники, если очень надо.
Но не сегодня.

rub-makar

блина... везде по-разному....
я нашла такую -
следующее_число = текущее_число * 134775813 + 1.
В силу переполнения разрядности получается плохо предсказуемая последовательность псевдослучайных чисел.
но знаешь, мне твой вариант больше нравится.

Filan

Избранные строки из:
".....
stdlib.h:
...
#define RAND_MAX 0x7fffffff
...
============
/usr/src/lib/libc/stdlib/rand.c:
...
static int
do_rand(unsigned long *ctx)
{
return *ctx = *ctx * 1103515245 + 12345) % u_long)RAND_MAX + 1;
}
...
static u_long next = 1;
int
rand
{
return do_rand(&next);
}
....."
P.S. libc FreeBSD 4.5
Оставить комментарий
Имя или ник:
Комментарий: