Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
1 | |||||||||||
std::random_device17.11.2012, 19:02. Показов 12160. Ответов 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
|
|
18.11.2012, 14:03 [ТС] | 21 |
Почему фигово?
Это споры о терминах, std::random_device также завязан на каких-либо процессах, а для получения истинно случайного числа надо абстрагироваться от всего. Естественно, сделать такое на ЭВМ просто невозможно. Но его случайности хватает для решения задач (возможно даже и не всех), требующих больший рандом, нежели ГПСЧ, именно поэтому, слово псевдо и убирают. Но от этого случайные числа, генерируемые random_device не становятся истинными, они лишь более случайны и удовлетворяют необходимым условиям в решении конкретной задачи.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
18.11.2012, 14:42 | 22 |
опять нет
random_number может использовать аппаратный ГСЧ, а там будут истинно случайные последовательности это разные вещи в-принципе /dev/random генерирует настоящие случайные числа по всяким флуктуациям и биениям в железе остальные генераторы используют всякие линейные конгруэнтные методы для генерации последовательностей, которые: - требуют инициализатора, чтобы завести уникальную последовательность - обладают всякими плохими свойствами (некоторой зависимостью между элементами, повторяемостью через некоторый большой период) аппаратные ГСЧ и ПГСЧ это разные вещи использовать ПГСЧ для инициализации ГСЧ - ну такого я еще не слышал (почему тогда просто ГСЧ не использовать?)
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
18.11.2012, 15:09 [ТС] | 23 |
Никто ГПСЧ для ГСЧ не использует. Скорее ГСЧ для инициализации ГПСЧ. А просто ГСЧ нет смысла использовать все время, хватает лишь единожды, но я это уже расписывал выше.
Не по теме: Шумы тоже имеют зависимость, все влияет на все, различна лишь степень влияния. Для решения определенных задач люди договариваются называть СЧ истинно случайными, если эта степень не превышает нужной погрешности. Некоторые физики с помощью движений и состояний атомов генерят СЧ и называют лишь их истинно случайными. У нас разные представления о связях объектов в мире. Я верю, что все взаимосвязано и все происходит так из-за стремящегося в бесконечность ряда предшествующих событий, поэтому не признаю истинно случайных чисел, лишь соглашаюсь для удобства решения задачи. Думаю пора прекращать оффтоп. В том, что std::random_device - ГСЧ, а std::mt19937 - ГПСЧ мы сходимся во мнениях, остальное уже философия) Подытожу, если у кого-то будет схожая с моей проблема: std::random_device требует использование аппаратного устройства. На Linux это dev/urandom или dev/random, поэтому в реализации на gcc в конструкторе вызывается попытка инициализации данных устройств, и, если этого не удается - кидается эксепшн. При портировании на windows, MinGW еще не до конца доработали, и конструктор все так же пытается получить доступ к данным устройствам, коих естественно на винде нет, отсюда и возникает ошибка. В компиляторе VS random.h реализован по своему, подстроен под винду и все работает нормально. Также в boost/random конструктор ведет себя по разному, в зависимости от ОС, что позволяет использовать его на различных ОС. Можно сказать, что это универсальное решение. Его я и использовал, проблема решена.
0
|
22 / 22 / 11
Регистрация: 14.11.2012
Сообщений: 64
|
||||||
19.11.2012, 16:55 | 25 | |||||
ВСЕ РАБОТАЕТ! XP!!!:
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
19.11.2012, 18:43 | 26 |
_andrew_, Клево конечно, очень за вас рады, но не стоит писать о том, суть чего не понимаете.
0
|
Jupiter
|
19.11.2012, 19:36
#27
|
1
|
MrGluck
|
|||||
19.11.2012, 19:53
[ТС]
#28
|
|||||
Не по теме: Jupiter, наверняка забыл
0
|
Vourhey
|
19.11.2012, 19:55
#29
|
Не по теме: _andrew_, повеселил, зачет.
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
19.11.2012, 20:18 | 30 |
2
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
19.11.2012, 20:56 [ТС] | 31 |
Somebody, вложенная функция, не?
Если да, то смысл же другой будет: обращение к std::random_device().operator()() каждый раз при вызове gen. Нам же нужно единичное обращение для инициализации, а не постоянное использование ГСЧ.
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
19.11.2012, 21:14 | 32 |
Не, это определение объекта - как с круглыми скобками, только без проблем со всякими неоднозначностями.
1
|
28.03.2013, 23:41 | 34 |
Народ, что там в новом mingw 4.8.0 сделали насчет random_device для windows? Исключения теперь уже не выкидывает, но случайные числа правильно так и не генерирует. Я так понял его еще до конца так и не реализовали.
0
|
1 / 1 / 2
Регистрация: 10.11.2013
Сообщений: 126
|
|||||||||||
26.12.2015, 22:06 | 38 | ||||||||||
У меня на семерке в MSVS2010 работает, а на 8.1 в MSVS2012 не работает такой код:
Это можно решить без boost? Создать ГСЧ? Добавлено через 15 минут Решаю пока так:
Лучше деление в генераторе поставить.
0
|
26.12.2015, 22:06 | |
26.12.2015, 22:06 | |
Помогаю со студенческими работами здесь
38
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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |