| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > как реализовать нормальный рандом в gcc??? |
| Автор: MrCherry 24.9.2007, 07:33 | ||
допустим такой код, как сделать чтобы rand всегда выдавал случайное значение? |
| Автор: MAKCim 24.9.2007, 08:59 | ||
|
| Автор: bsa 24.9.2007, 09:55 | ||
MrCherry, srand надо вызывать только один раз!!!
|
| Автор: MrCherry 24.9.2007, 12:00 |
| ой плин... спасибо bsa... теперь вопрос на миллион.. почему эта штука заставляет комп пищать при выводе cout << a; ? |
| Автор: bsa 24.9.2007, 12:11 |
| потому что есть символ такой BELL (звонок). Если не ошибаюсь, у него код 0x07. cout << a, когда a - это переменная типа char выводится не число, а символ, код которого содержит a. |
| Автор: comcon1 24.9.2007, 12:17 | ||
| если нужны случайные с нормальным распределением - ветка функций rand48. Если хошь абсолютно случайные числа в линухе, делай так:
устройство урандом хавает температуру процессора, и как следствие, абсолютно случайна. |
| Автор: bsa 24.9.2007, 12:31 | ||
Откуда такие сведения? |
| Автор: comcon1 24.9.2007, 12:35 | ||
Кто-то говорил. Но то, что написано man urandom, подтверждает. Кстати, я думал, что есть функция рандома, юзающая этот урандом, как нить быстрее, чем каждый раз открывать-закрывать файл, а открывать один раз и во всем приложении юзать переменную как-то лень... Но функции я чо-т не нашел. придется делать глобальную переменную файлового идентификатора в приложении(( |
| Автор: bsa 24.9.2007, 13:17 |
| comcon1, обрати внимание, про температуру процессора нет ни слова. Кстати, /dev/urandom - это бесконечный /dev/random. Именно последний - это то, что ты написал. А /dev/urandom он эквивалентен /dev/random пока не кончится энтропия. Как только она кончается начинается заполнение псевдослучайными числами. |
| Автор: comcon1 24.9.2007, 13:23 |
| если тебе нужно часто читать рандом, то где гарантия, что энтропия не кончится?? environmental noise - шум внешней среды. Сюда, мне кажется как раз и относится температура процессора, скорость вентилятора и пр. Разве нет?? Тогда что сюда относится? |
| Автор: bsa 24.9.2007, 13:27 |
| comcon1, думаю в данном контексте имеется в виду "шум" компонентов (устройств компьютера) - данные с них и их частота поступления. Вот представь, у меня есть комп P166MMX, на плате без датчиков температуры и скорости вращения вентиляторов. А /dev/urandom при этом работает. Ладно. мы ушли в глубокий оффтопик. |
| Автор: Invisible_kid 24.9.2007, 22:41 |
| ИМХО "в нармальном компе ничего "случайного" быть не может!") |
| Автор: Invisible_kid 25.9.2007, 10:33 |
| ...а вобще как мне кажется, самый нормальный рандом зависит от времени.., т.е. по кругу ганяются какие-то значения и в момент обращения к "рандому" выдается текущее, т.е. получается чот вероятность у всех значений одинаковая, но тем не менее если пасадить за комп чела, который переодичекси будет вызывать "случайное" число, результы всегда бутут разные... |
| Автор: bsa 25.9.2007, 14:07 |
| Invisible_kid, в том то и дело, что "число крутящееся по кругу" не случайно. Его можно вычислить, зная период обращения и начальное значение. А вот то, что оно берется в случайный момент времени и дает искомую случайность. Именно на этом принципе и основана работа этих /dev/(u)random - читай "число берется в тот момент, когда юзер нажал на кнопку". |