Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Интересный вопрос...

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть же алгоритм, который высчитывает случайное число . интересно, как он устроен?

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 18:28 20-01-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2Polkan
смотри в исходниках
например на Delphi
procedure       _RandInt;
asm
{     ->EAX     Range   }
{     <-EAX     Result  }
        PUSH    EBX
{$IFDEF PIC}
        PUSH    EAX
        CALL    GetGOT
        MOV     EBX,EAX
        POP     EAX
        MOV     ECX,[EBX].OFFSET RandSeed
        IMUL    EDX,[ECX],08088405H
        INC     EDX
        MOV     [ECX],EDX
{$ELSE}
        XOR     EBX, EBX
        IMUL    EDX,[EBX].RandSeed,08088405H
        INC     EDX
        MOV     [EBX].RandSeed,EDX
{$ENDIF}
        MUL     EDX
        MOV     EAX,EDX
        POP     EBX
end;

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 18:46 20-01-2005
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoKC0DeR
мда, вот они - плоды просвещения...
 
2Polkan
читать второй том кнута, глава 3, случайные числа

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 18:55 20-01-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redp
Не понял про "плоды просвещения"

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 21:28 20-01-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот оно что :))))). можно закрывать :)). спасибо за ответ ;)

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 03:16 21-01-2005
YurikGL



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
>Есть же алгоритм, который высчитывает случайное число . интересно, как он устроен?  
 
Называется получение псевдо-случаной последовательности...

Всего записей: 308 | Зарегистр. 02-09-2004 | Отправлено: 07:57 21-01-2005
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoKC0DeR
абисняю - в качестве ответа на вопрос незнакомым людям предлагать кусок кода на асме, ничо при этом не объясняя - неэтично

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 11:38 21-01-2005
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Интересен вопрос о  "CALL    GetGOT". может разберём дословно этот пример и покажем начинающим суть? Приведу функцию GetGOT и вы поймёте моё недовольствие (или я ошибаюсь?)

Код:
 
{$IFDEF PIC}
function GetGOT: LongWord; export;
begin
  asm
  MOV Result,EBX
  end;
end;
{$ENDIF}
 

Взято дословно с юнитаSystem.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 13:47 21-01-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
все очень просто...
берутся сотые доли секунды текущего времени на машине (как наиболее динамично изменяющаяся величина) и из них все получают...
поэтому и называется это хозяйство псевдослучайной величиной...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 17:12 22-01-2005
MoKC0DeR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redp
Ну простите я ожидаю от человека хотябы элементарных знаний

Всего записей: 510 | Зарегистр. 31-03-2004 | Отправлено: 20:37 22-01-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
 берутся сотые доли секунды текущего времени на машине (как наиболее динамично изменяющаяся величина) и из них все получают...  

 
Бред. Если бы я на таком генераторе вычислял интеграл методом Монте-Карло, получал бы всегда один результат. Однако, поди ж ты, они разные (разница тем меньше, чем больше значений я беру). Да, Кнута читать неплохо.
 
 
Добавлено:
akaGM

Цитата:
 берутся сотые доли секунды текущего времени на машине (как наиболее динамично изменяющаяся величина) и из них все получают...  

 
Бред. Если бы я на таком генераторе вычислял интеграл методом Монте-Карло, получал бы всегда один результат. Однако, поди ж ты, они разные (разница тем меньше, чем больше значений я беру). Да, Кнута читать неплохо.

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 10:31 23-01-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
уважаемый TheChampion
гы
и даже дважды...
гы-гы
 
я говорю не о принцип. алгоритме, а о том, что явл. основой (входными данными) для его
_реализации_ на ПиСи...
 
что по-твоему RandSeed?
 
RandSeed := GetTickCount; например...
 
или вот так, если тебе это более привычно:
RandSeed := _time(nil);
 
--------
а по поводу ММК -- мы сами с усами...
 
http://www.crys.ras.ru/quasicrystals/
 
один из авторов -- ваш покорный...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 17:22 23-01-2005 | Исправлено: akaGM, 17:32 23-01-2005
2Polkan



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в Хакере даже конкурс был - написать свою прогу, генерирующую случ. числа... на любом языке...

Всего записей: 435 | Зарегистр. 20-11-2004 | Отправлено: 18:48 23-01-2005
YurikGL



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
>берутся сотые доли секунды текущего времени на машине (как наиболее динамично изменяющаяся величина) и из них все получают...  
 
Нам в университете как-то по другому давали. Именно последовательность без привязки к таймеру.

Всего записей: 308 | Зарегистр. 02-09-2004 | Отправлено: 20:27 23-01-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
правильно вам все давали...
 
я тоже могу сейчас завалить вас алгоритмами генерации с почти любым распределением (и нормальным и биноминальным и гамма- и тд и тп)...
но, братцы, мы же о разных вещах говорим...
 
алгоритм и его реализация...
 
что бы запустить (_любой_) алгоритм генерации случайной последовательности, вам необходимо инициализировать генератор...
 
так вот на компьютерах, как правило, используют для этих целей тактовый генератор, а попросту говоря -- системный таймер...
посмотрите любые исходники любых библиотек...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 21:02 23-01-2005 | Исправлено: akaGM, 21:05 23-01-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
 

Цитата:
я говорю не о принцип. алгоритме, а о том, что явл. основой (входными данными) для его
_реализации_ на ПиСи...

 
Не стоит путать божий дар с яичницей.
 
Заметь, что ты инициализируешь генератор таймером, но не используешь таймер для вычислений случайного числа. С тем же успехом ты можешь взять значение слова по адресу 0x123456. Так что тройное ха-ха!

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 10:39 24-01-2005
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ладно, закругляемся...
 
в качестве PS
гы-гы было направлено не на твои высказывания, а лишь на количество попыток обвинить меня в бреде...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 16:13 24-01-2005
modulo



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кстати я тут делал покер на си++ билдере и выяснил,что Random(x) процентах в 90 случаев выдает одинаковые первые числа, в частности у меня это выражалось в том, что каждый раз в начале игры мне вылетали одинаковые карты, пришлось делать свой генератор на основе текущего времени(обрабатывал секунды, минуты, часы)

Всего записей: 228 | Зарегистр. 03-07-2004 | Отправлено: 09:49 28-01-2005
TheChampion

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
modulo
Это не баг, это фича. Вначале все последовательности будут одинаковые. Если хочешь разные --- сделай randomize() перед вызовом rand().
 
Стандартную библиотеку надо знать!

Всего записей: 656 | Зарегистр. 25-06-2004 | Отправлено: 10:11 28-01-2005
modulo



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так я делаю рандомайз, у меня была функция перетусовки колоды в ней естественно сначала прописано randomize(), а потом где надо random()

Всего записей: 228 | Зарегистр. 03-07-2004 | Отправлено: 11:02 28-01-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Интересный вопрос...


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru