Розбираємося з принципом роботи генератора випадкових чисел

Механізм роботи видачі випадкових значень

Всі явища, які з нами відбуваються, бувають двох типів - випадкові і закономірні. Наприклад, у вас бракувало для покупки магнітофона трошки купюр, і ви вирішили купити плеєр - тобто вчинок є логічним і очікуваним. Але, йдучи до магазину, ви виявляєте потрібну суму, яка випадковим чином змінила плани. Робота генератора випадкових чисел повністю залежить від заданого в оператор механізму, так що все числа, які видаються, в поточному подію є псевдовипадковими. Оператори, які повертають випадкові числа. звертаються до часу, а саме системного. Тобто як в світі, так і в програмуванні не буває нічого цілком абсолютного.

функція rand

У програмуванні на Сі, для отримання випадкових значень винайшли вбудовані оператори, які видають нам необхідні результати. І так, для створення випадкового числа застосовується функція rand. яка Оператор rand застосовується для отримання випадкових чисел, які повертають діапазон від 0, і до певної константи. Причому дана константа оголошується в системній директиві "stdlib.h", там і базується ця функція rand. Синтаксис цієї функції простий: int m = rand (); тобто видається ціле число. Випробувавши оператор на практиці, ви побачите, що з'являються числа при старті додатка ідентичні. Помилка полягає в тому, що оператор rand працює з одним і тим же системним часом, яке збереглося при компіляції. Даний генератор випадкових чисел зав'язаний на алгоритмі зміни програмного часу, то все працює належним чином.

Тепер про srand і random

Для даної проблеми, незамінна була функція, яка б обнуляє вбудоване час при кожному зверненні до оператора rand, і розробники ПЗ зробили функцію srand. Дія дозволяє функції rand кожен раз звертатися не до встановленого, а до поточного вбудованому таймеру, що відкриває можливість працювати генератору вірно - видавати випадкові значення. Нещодавно в мові програмування Сі ++ удосконалився механізм видачі випадкових чисел, через появу мікросекунд. До того ж розширився діапазон значень, і всі поточні нововведення трансформувалися в функцію random.