Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
1 | |||||||||||
std::random_device17.11.2012, 19:02. Показов 12156. Ответов 37
Здравствуйте.
Я так понимаю, Windows, в отличии от линя, не предоставляет специльное устройство для недетерминированных случайных чисел. Т.е. запись
Как на винде то получить недетерминированное число, или прийдется довольствоваться следующей записью ?
0
|
17.11.2012, 19:02 | |
Ответы с готовыми решениями:
37
std::random_device падает приложение STL random_device Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri |
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
17.11.2012, 19:41 [ТС] | 5 |
Vourhey, проблема в том, чтобы получить на винде доступ к специальному устройству.
Я так понял, что сделать нельзя, исходя из этого Я прошу помочь сделать это на винде, а не показать, насколько плохая/хорошая ОС или компилятор.
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
17.11.2012, 19:44 | 6 |
Значит, это может работать в винде и без эксепшнов. Значит, нужно узнать, что за код создает твой компилер. Хотя, бы дизассемблировать и узнать, где эксепшн возникает. Или в рантайме посмотреть, в каком вызове падает.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
17.11.2012, 21:55 [ТС] | 7 | |||||
Vourhey,
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
18.11.2012, 01:51 [ТС] | 10 | |||||
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
18.11.2012, 02:14 | 11 |
Проверил то же самое приложение, код которого на картинке. И в семерке все работает окей.
Странный код не понимаю, какого фига он на винде пытается открыть /dev/urandom? Это же никсовый девайс Они библиотеку что ли не портировали? Добавлено через 5 минут Судя по коду, тут удивляться больше нечему. /dev/urandom на винде нет. Логично, что он его открыть не может. Это, от никсовой версии, похоже, и осталось при переносе библиотеки. А стандартная библиотека от MS работает нормально, как и ожидается, потому что не пытается открывать несуществующих девайсов виртуальных. Добавлено через 4 минуты Я убрал портянку MS-кого кода, потому что она тут и не нужна, и так вроде видно, что трабла в стандартной либе, поставляющейся с тем компилятором или средой, что ты используешь.
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
18.11.2012, 02:24 [ТС] | 12 |
Vourhey, вот в том то и дело, что в MinGW random.h осталась от родного gcc) Как раз, как опубликовал пост с описанием конструктора, так и понял. Думал, мб в качестве параметра конструктора можно будет путь к спец. устройству передать (MS_DEF_PROV на винде). Прийдется ставить буст и менять файл random.h.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||||||
18.11.2012, 02:34 | 13 | ||||||||||
а зачем ты делаешь (охренительно конечно, что ты не мог вставить код)
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
18.11.2012, 02:53 | 15 |
ok, я посмотрел в описание и удивлен еще больше
что ты делаешь: ты создаешь std::random_device rd() - генерирует псевдослучайное число, которое используется для инициализации второго генератора
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
18.11.2012, 03:25 [ТС] | 16 |
Ну да, а также можно инициализировать gen.seed (time (0)). Оно берет число, отталкиваясь от которого генерирует случайные числа, если брать константу, то будет генерировать уже не псевдослучайные числа, а каждый раз показывать одинаковый результат. Нам не нужно использовать всю мощь random_device, нам хватит взять лишь одно недетерменированное число, а на основе него уже создавать другие случайные числа.
Добавлено через 4 минуты Генератор СЧ нужно же как то инициализировать. Почему вас смущает тот факт, что инициализировать будет результат другого ГСЧ, недетерменированного. На srand (time (0)) никто не орет, хотя принцип действия тот же.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
18.11.2012, 03:30 | 17 | |||||
понимаешь в чем соль - для инициализации ПГСЧ нужно всего лишь уникальное число
использовать для инициализации ПГСЧ генератор более случайных чисел (грубо говоря) накладно и бессмысленно тем более такой может быть и не реализован хотя я вижу подобный пример на том же cppreference.com, но все же мне кажется это неправильно Добавлено через 1 минуту Потому что это бессмысленно из этой вашей википедии на свойства последовательности псевдо случайных чисел влияет уникальность инициализатора, а не его природа time(0) в-принципе достаточно уникален, так что все норм из этой вашей википедии
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
18.11.2012, 03:49 [ТС] | 18 |
alex_x_x, да, есть возможность обойтись без этого, но использование ГСЧ для инициализации добавляет ++ к "случайности". Оно, естественно не делает ГПСЧ ГСЧ (понятно, что истинного ГСЧ не существует, но иначе получилась бы каша в терминах), но начало распределения уже становится неслучайным. Чем инициализировать, все же, по-моему, остается делом вкуса, но думаю не нужно спорить о том, что случайности time(0) может не хватать.
P.S. именно оттуда я и взял способ инициализации, но тогда я не ставил это под сомнение, а принял как данность.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
18.11.2012, 09:17 | 20 |
0
|
18.11.2012, 09:17 | |
18.11.2012, 09:17 | |
Помогаю со студенческими работами здесь
20
STL std::set, std::pair, std::make_pair На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами Std::begin() ,std::end(),std::copy Std::bind, std::mem_fun, std::mem_fn Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |