В природе все процессы и явления можно смело разделить на закономерные и случайные. Допустим, мы точно знаем, что по каналу вовремя начнется ток шоу, т.е. явление будет закономерным и ожидаемым. Но, вдруг отключили свет и, из-за случайности, мы уже не сможем насладиться нашей телепередачей. Так же и в программировании генератор случайных чисел возвращает псевдослучайные значения, т.е. на самом деле выдача осуществляется по принципу заложенного вглубь функции алгоритма. Функции, которые создают случайные значения, обращаются к таймеру - встроенному в систему.
Следовательно как в природе, так и в программировании не бывает ничего всецело случайного и логичного.
Поговорим о rand
Что бы выдать случайное значение генератор случайных чисел применяет встроенные функции для генерации нужного результата. для выдачи случайного значения используется функция rand, которая Оператор rand применяется для получения случайных чисел, которые могут иметь диапазон от нуля, и до определенной константы. Заданная константа, обычно, инициализируется в в препроцессорном файле , там и располагается эта функция rand. Вот вызов: char f = начальное число + rand() % конечное значение. Как это ни странно, при старте программы у нас постоянно будет ответом именно это значение. Все взаимосвязано на системном времени, и функция rand запоминает при компиляции определенное время, которым и управляет. Весь данный генератор случайных чисел функционирует на механизме изменения встроенного времени, то все работает неправильно.
Поговорим о srand и random
Для выхода из проблемы, разработчики программ разработали функцию srand, которая при обращении к функции rand, сбрасывает программный таймер. Таким образом функция srand способствует алгоритму, включенному в генератор случайных чисел, функционировать правильно, и теперь все наши результаты, полученные функцией rand, будут являться случайными. Недавно язык программирования си ++ начал работать с микросекундами, что привело к усовершенствованию работы алгоритма случайных чисел. Данное нововведение трансформировалось в функцию random, которая ко всему прочему еще увеличила диапазон допустимых чисел.
|