![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| MrCherry |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2006 Репутация: нет Всего: нет |
допустим такой код, как сделать чтобы rand всегда выдавал случайное значение? |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
MrCherry, srand надо вызывать только один раз!!!
|
|||
|
||||
| MrCherry |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2006 Репутация: нет Всего: нет |
ой плин... спасибо bsa...
теперь вопрос на миллион.. почему эта штука заставляет комп пищать при выводе cout << a; ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
потому что есть символ такой BELL (звонок). Если не ошибаюсь, у него код 0x07. cout << a, когда a - это переменная типа char выводится не число, а символ, код которого содержит a.
|
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
если нужны случайные с нормальным распределением - ветка функций rand48.
Если хошь абсолютно случайные числа в линухе, делай так:
устройство урандом хавает температуру процессора, и как следствие, абсолютно случайна. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Откуда такие сведения? |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Кто-то говорил. Но то, что написано man urandom, подтверждает. Кстати, я думал, что есть функция рандома, юзающая этот урандом, как нить быстрее, чем каждый раз открывать-закрывать файл, а открывать один раз и во всем приложении юзать переменную как-то лень... Но функции я чо-т не нашел. придется делать глобальную переменную файлового идентификатора в приложении(( Это сообщение отредактировал(а) comcon1 - 24.9.2007, 12:38 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
comcon1, обрати внимание, про температуру процессора нет ни слова. Кстати, /dev/urandom - это бесконечный /dev/random. Именно последний - это то, что ты написал. А /dev/urandom он эквивалентен /dev/random пока не кончится энтропия. Как только она кончается начинается заполнение псевдослучайными числами.
|
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
если тебе нужно часто читать рандом, то где гарантия, что энтропия не кончится?? environmental noise - шум внешней среды. Сюда, мне кажется как раз и относится температура процессора, скорость вентилятора и пр. Разве нет?? Тогда что сюда относится?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
comcon1, думаю в данном контексте имеется в виду "шум" компонентов (устройств компьютера) - данные с них и их частота поступления.
Вот представь, у меня есть комп P166MMX, на плате без датчиков температуры и скорости вращения вентиляторов. А /dev/urandom при этом работает. Ладно. мы ушли в глубокий оффтопик. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
comcon1,
не знаю как насчет скорости вентилятора и температуры CPU (кстати, она мало подходит, т. к изменяется в общем случае в небольших пределах (или вообще не меняется при постоянной работе)), но точно знаю, что пул энтропии пополняется засчет: 1. Интервалов между прерываниями (в дескрипторе которых установлен флаг SA_SAMPLE_RANDOM) 2. Скан-кодов и интервалов между нажатиями клавиш 3. Позиции указателя мыши и интеравалов между прерываниями Добавлено через 1 минуту и 45 секунд
гарантии нет никакой поэтому не следует слишком часто и много читать с /dev/random -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Invisible_kid |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
ИМХО "в нармальном компе ничего "случайного" быть не может!")
|
|||
|
||||
| Invisible_kid |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
...а вобще как мне кажется, самый нормальный рандом зависит от времени.., т.е. по кругу ганяются какие-то значения и в момент обращения к "рандому" выдается текущее,
т.е. получается чот вероятность у всех значений одинаковая, но тем не менее если пасадить за комп чела, который переодичекси будет вызывать "случайное" число, результы всегда бутут разные... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Invisible_kid, в том то и дело, что "число крутящееся по кругу" не случайно. Его можно вычислить, зная период обращения и начальное значение. А вот то, что оно берется в случайный момент времени и дает искомую случайность. Именно на этом принципе и основана работа этих /dev/(u)random - читай "число берется в тот момент, когда юзер нажал на кнопку".
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |