Техника
Почему функция rand в C++ при генерировании последовательностей орел-решка не может сгенерировать последовательности
не может сгенерировать последовательности более 15 орлов\решек подряд?
Вот представь, у меня она после запуска всегда через одно и то же кол-во вызовов выдавала 15 орлов подряд.
Потом вставил srand (time(0)); в начало main(), всё вылечилось - стала каждый раз за разное кол-во итераций выдавать 15 орлов.
Вопрос: какого хрена?
А я тебе скажу. Инициализация ГПСЧ (генератора псевдо-случайных чисел) - задача обычно (по времени) более трудоемкая по сравнению с последующей генерацией оных большими пачками.
Потом вставил srand (time(0)); в начало main(), всё вылечилось - стала каждый раз за разное кол-во итераций выдавать 15 орлов.
Вопрос: какого хрена?
А я тебе скажу. Инициализация ГПСЧ (генератора псевдо-случайных чисел) - задача обычно (по времени) более трудоемкая по сравнению с последующей генерацией оных большими пачками.
Natu Angel
Я произвел инициализацию по времени. Я не такой наивный простачок. И даже с семенем по времени больше 15-ти не выдает.
вообще-то "штатная" функция rand в стандартной сишной библиотеке - вообще безобразна, у нее следующее число генериуется из предыдущего, причем состояние хратинся в 32-битовых long, а значит максимальная длина последовательности, которую она выдает - 2^32-1 (0 - не бывает), после этого все идет по циклу, так что если вы за этот цикл не встретили то, что искали - не встретите никогда.
собственно, у любого алгоритма псевдослучайных чисел есть цикл. Есть способы существенного удлинения этого цикла - но он всегда конечен.
если бы числа были действительно случайными, то вероятность встретить была бы 1/2^15, то есть вам потребовалось бы перебрать порядка 2^15 чисел.
можно использовать "замешивание", берется два датчика разной природы, один - хороший, второй - любой. Изначально первым датчиком заполняется буфер, скажем в 1013 чисел, затем при каждом обращении вторым датчиком выбирается одно число из буфера, его возвращают в качестве случайного а на его место пишется новое число, сгенерированное первым датчиком.
Ну и если вы хотите получать орлы и решки - надо брать старшие биты, чем младше бит - тем он менее случаен. Самый младший вообще чередуется 0-1-0...
собственно, у любого алгоритма псевдослучайных чисел есть цикл. Есть способы существенного удлинения этого цикла - но он всегда конечен.
если бы числа были действительно случайными, то вероятность встретить была бы 1/2^15, то есть вам потребовалось бы перебрать порядка 2^15 чисел.
можно использовать "замешивание", берется два датчика разной природы, один - хороший, второй - любой. Изначально первым датчиком заполняется буфер, скажем в 1013 чисел, затем при каждом обращении вторым датчиком выбирается одно число из буфера, его возвращают в качестве случайного а на его место пишется новое число, сгенерированное первым датчиком.
Ну и если вы хотите получать орлы и решки - надо брать старшие биты, чем младше бит - тем он менее случаен. Самый младший вообще чередуется 0-1-0...
Sergei Urevich
Кстати, в стандарте C++11 для генерации псевдослучайных чисел много всего нового появилось:
http://en.cppreference.com/w/cpp/numeric/random
http://en.cppreference.com/w/cpp/numeric/random
Похожие вопросы
- объясните, кто-нибудь, пожалуйста, почему немецкий «Фердина́нд» c 200 мм лобовой броней относят к САУ, а не к танкам ?
- На РЖД: Какая последовательность откл\подкл аварийного участка контактного провода =3кВ?
- в какой последовательности воткнуть передние USB порты ?
- Превратить переменный ток из розетки в высокочастотную последовательность импульсов постоянного тока
- Чем отличается последовательность фракталов от последовательности бифоначи
- Как вычислить нулевую последовательность алюминиевой или стальной шины.в ГОСТ 28249-93 не сказано.
- В разное время на разных частотах коротковолнового диапазона натыкался на голос, говорящий последовательность цифр >>
- Флеш-накопитель. Принцип и последовательность работы, характеристики - подскажите
- Как запустить РДГ-50н (регулятор давления газа), расскажите последовательность операций.
- Ток в розетке. Какой последовательности течет ток в розетке? Прямой? Я не могу понять сам процесс...