Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 987
от 05.02.2008, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 482, Экспертов: 58
В номере:Вопросов: 1, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 120955: Доброй ночи, эксперты. Возможно, вопрос покажется странным, но тем не менее спрошу: 1. На чем основаны функции, генерирующие случайные числа? 2. От чего зависит рандом? 3. Можно ли вручную (по формуле на бумаге) вычислить значение, кот...

Вопрос № 120.955
Доброй ночи, эксперты. Возможно, вопрос покажется странным, но тем не менее спрошу:
1. На чем основаны функции, генерирующие случайные числа?
2. От чего зависит рандом?
3. Можно ли вручную (по формуле на бумаге) вычислить значение, которое вернет функция rand()?
4. Буду вам очень благодарен, если вы приведёте библиотечный код функций srand и rand, в MS VC++ или в BC 3.1 (искал в библиотеке time.h - не нашёл).
Благодарю за внимание.
Отправлен: 31.01.2008, 01:10
Вопрос задал: X-men (статус: 10-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: mega
Здравствуйте, X-men!
Конкретно, для случая srand и rand, "случайность" чаще всего зависит от текущего времени, на исполняемой код, машине. Исходник в приложении. Как можно заметить, формула довольно проста:

// инициализация генератора, seed - опорная точка
seed = текущее время /*в общем случае - любое число*/
// генератор
seed = seed * 214013L + 2531011L
rand = (seed >> 16) & 0x7fff
// rand - результат функции rand

Если инициировать генератор 1 раз, то каждый последующий вызов rand будет модифицировать опорную точку с фиксированным приращением, но операция умножения дает непредсказуемое масштабирование результата (учитываем фактор переполнения при умножении и рекурсию), напрямую зависящее от первого значения seed, именно поэтому, чем реже инициировать seed, тем больше шансов получить нормальное распределение, ну и, конечно, магические цифры, куда без них

Приложение:

Ответ отправил: mega (статус: 3-ий класс)
Ответ отправлен: 31.01.2008, 02:21
Оценка за ответ: 5

Отвечает: Сандров Алекс
Доброе утро, X-men!

1. Псевдослучайность. То есть есть некий набор "случайных" цифр, которые по вызову rand выводятся, при чём rand имеет внутренний счётчик.
2. От RAND_MAX, которую можно андефнуть и потом заново задефайнить и от внутреннего счётчика. Поэтому советуют вначале программы, в "случайном" цикле прогонять rand(), чтобы сдвинуть этот счётчик. "случайность" делают например так, цикл от нуля до текущего количества секунд.
3. Можно, но в каждом компиляторе(системе) они разные. Ну и тока не вычислить, а просто знать порядок цифр :) У меня вот первое rand() = 41.
4. rand() определён в библиотеке stdlid, исходники микрософт тщательно охраняет, но я думаю, можно под дебагом всё увидет, зная примерный принцип работы.
Ответ отправил: Сандров Алекс (статус: 2-ой класс)
Ответ отправлен: 31.01.2008, 05:53
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.70 от 17.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное