Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2008, 12:08   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Вопрос Как генирируеться случайное число?

Привет всем... У меня вопрос, как комп генентрует случайное число, по дате и времени?
Altera вне форума Ответить с цитированием
Старый 20.04.2008, 12:30   #2
Романнн
Пользователь
 
Регистрация: 04.11.2007
Сообщений: 64
По умолчанию

хм.....щас можт че и сморожу,но в сегодняшних процессорах предусмотрена такая штука как "тепловой шум".....думаю,не надо объяснять что с этим шумом происходит?))
Романнн вне форума Ответить с цитированием
Старый 20.04.2008, 12:48   #3
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
по дате и времени
Мне казалось, что комп просто выбирает любое число из предложенного диаппазона.
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 20.04.2008, 12:59   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Borland, насколько я помню, генерирует эти числа в зависимости от текущего времени в миллисекундах.
mihali4 вне форума Ответить с цитированием
Старый 20.04.2008, 13:58   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Привет всем... У меня вопрос, как комп генентрует случайное число, по дате и времени?
Это в значительной степени зависит от задачи. "Обычные", системные, генераторы делают это, как правило, с помощью несложной арифметики, скажем вот генератор псевдослучайных чисел из FreeBSD.
B_N вне форума Ответить с цитированием
Старый 20.04.2008, 13:59   #6
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Borland, насколько я помню, генерирует эти числа в зависимости от текущего времени в миллисекундах.
Скорее всего так.

Делал программу на паскале, которая случайно расставляла точки на экране, через какое-то время начали вырисовываться прямые линии

Цитата:
комп просто выбирает любое число
Объясни ему, что такое "любое" число

Последний раз редактировалось Viteef; 20.04.2008 в 14:30.
Viteef вне форума Ответить с цитированием
Старый 20.04.2008, 14:27   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Так как не указано, что подразумевается под словами "комп генерирует" то вариантов правильных ответов вагон и ещё тележка!!

есть и спецплаты (для шифрации), у которых есть аппаратный генератор случайных чисел, а есть и таблицы случайных чисел...

с точки зрения, как это происходит в какой-нибудь среде программирования например Pascal/Delphi), то
имхо, наиболее верный ответ дал mihali4!

Например, в Pascal/Delphi есть переменная RandSeed
есть алгоритм (ну, грубо говоря, математическая формула) для получения очередного случайного числа на основе предыдущего (опорного числа).
Если эту переменную не проиницилизировать, то будет получаться одна и та же последовательность случайных чисел... Для того, чтобы в эту переменную занести новое опорное число используется процедура Randomize, в её исходниках написано следующее:
sum = hours * 60 + minutes
sum = sum * 60 + seconds
sum = sum * 1000 + milliseconds
MOV RandSeed,EAX
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.04.2008, 14:47   #8
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от Viteef Посмотреть сообщение
Скорее всего так.

Делал программу на паскале, которая случайно расставляла точки на экране, через какое-то время начали вырисовываться прямые линии


Объясни ему, что такое "любое" число
Это с randomize, или без?
Altera вне форума Ответить с цитированием
Старый 20.04.2008, 18:20   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Привет всем... У меня вопрос, как комп генентрует случайное число, по дате и времени?


Код:
function Random: Extended;
{$IF DEFINED(CPU386)}
const two2neg32: double = ((1.0/$10000) / $10000);  // 2^-32
asm
{       FUNCTION _RandExt: Extended;    }

        PUSH    EBX
{$IFDEF PIC}
        CALL    GetGOT
        MOV     EBX,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}

        FLD     [EBX].two2neg32
        PUSH    0
        PUSH    EDX
        FILD    qword ptr [ESP]
        ADD     ESP,8
        FMULP   ST(1), ST(0)
        POP     EBX
end;
{$ELSEIF DEFINED(CLR)}
begin
  InitRandom;
  Result := RandomEngine.NextDouble;
end;
Код:
function Random(const ARange: Integer): Integer;
{$IF DEFINED(CPU386)}
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;
{$ELSEIF DEFINED(CLR)}
begin
  InitRandom;
  Result := RandomEngine.Next(ARange);
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43
Случайное число Altera Общие вопросы Delphi 4 05.02.2008 22:22
Как згенерировать случайное число SeRhy Помощь студентам 2 25.11.2007 20:27
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14