![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
Чисто в позновательных целях меня интересует алгоритм работы функии Random .
Например в электронике случайное число можно получить преребирая с высокой частотой числа и при нажатии на кнопку считать из счетчиков число . А как получить случайное число в компьютере для меня загадка. |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
функции, подобные рэндому (WriteLn, например) а также всякие константы типа TRUE и пр. определены не в коде, а на уровне компилятора. так что посмотреть их исходники, увы, возможным не представляется. но в общем и целом используется алгоритм перебора от некоего базового числа (число это инициализирует проедура Randomize по значениям системного времени).
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
типичная формула:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Вот тебе статья на эту тему, автор bad_guy
|
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
К слову про Random:
А что, програмёрам лень было включить Randomize в само тело Random'а? А то порой забудешь прописать Randomize и всё летит к чертям собачьим ![]() |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
Pakshin A. S., нет, не лень. но тогда инициализация счётчика происходила бы при каждом вызове рэндома, что может быть не нужно.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Seti |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 4.12.2003 Репутация: 1 Всего: 1 |
x77
Нашел в System.pas код функции Randomize и _RandInit, на который выскакивает отладчик при их вызове. Поскольку эти функции написаны на ассемблере, без разницы, где изучать их код - в System.pas или в любом отладчике типа SoftIce ![]() Вот пример Random: PUSH EBX XOR EBX, EBX IMUL EDX,[EBX].RandSeed,08088405H INC EDX MOV [EBX].RandSeed,EDX MUL EDX MOV EAX,EDX POP EBX Pakshin A. S. Инициализацию нельзя вызывать в цикле, иначе случайные числа будут сильно повторяться. (когда-то сам наступил на эти грабли) |
|||
|
||||
Jey_k |
|
||||
![]() WEB-командир ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4149 Регистрация: 16.11.2003 Где: Москва Репутация: 1 Всего: 61 |
Господа могу с уверенностью вам сказать что эта формула, а именно формула конгруэтного отношения случайной величины Гаусса в функции Random не применяется. Имеет место экспоненциальный закон распределения случайной величины,рассчет ведется в интегральной форме, за начальное значение берется текущий бип системного таймера. |
||||
|
|||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Jey_k
Я просто как пример ее привел ![]() -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Не прав, все они (точнее почти все) находятся в модуле SYSTEM, и исходники их есть в поставке. Просто они обычно имеют несколько отличающиеся имена, и реализаваны часто на ASMме -------------------- Все знать невозможно, но хочется |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
Петрович, нету их там. открой систем:
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |