Псевдо-випадкові числа є важливими для багатьох комп'ютерних програм, таких як ігри та безпека. У іграх випадкові числа забезпечують непередбачувані елементи, на які гравець може відповісти, наприклад, ухиляючись від випадкової кулі або малюючи карту з верхньої частини колоди.
У комп'ютерній безпеці псевдовипадковість важлива в алгоритмах шифрування, які створюють коди, які не можна передбачати або вгадати.
Що таке PRNG?
Генератор псевдовипадкових чисел або PRNG - це будь-яка програма або функція, яка використовує математику для моделювання випадковості. Його також можна назвати DRNG (цифровий генератор випадкових чисел) або DRBG (детермінований генератор випадкових біт).
Іноді математика може бути складною, але загалом, використання PRNG вимагає лише двох кроків:
- Наведіть PRNG довільним насінням.
- Запитайте наступне випадкове число.
Насіннєве значення є «вихідною точкою» для створення випадкових чисел. Значення використовується при обчисленні чисел. Якщо значення насіння змінюється, згенеровані номери також змінюються, і одне насіннєве значення завжди дає однакові числа. З цієї причини, цифри насправді не випадкові, тому що справжню випадковість ніколи не могла бути створена.
Поточний час часто використовується як унікальне значення насіння. Наприклад, якщо це 5 березня 2018 року, о 5:03 вечора і 7, 01324 секунди UTC, що може бути виражено як ціле число. Цей точний час ніколи не повториться, тому PRNG з цим насінням повинен створити унікальний набір випадкових чисел.
Примітка: Можливість відтворення випадково згенерованої послідовності може бути корисною. У академічних додатках для моделювання може генеруватися масова послідовність випадкових значень, а потім відтворюватися саме для більш детального аналізу пізніше. Як інший приклад, у комп'ютерних іграх, якщо гравець завантажує збережену гру, будь-які "випадкові" події можуть бути такими ж, як якщо б гра не припинялася. Таким чином, гравець не може перезавантажити ту саму гру багато разів, щоб спробувати краще везти.
Як генерувати псевдовипадкове число
Нижче наведено кілька способів створення псевдовипадкового числа в загальних програмах і мовах програмування.
Командний рядок Windows
У командному рядку Windows, або в пакетному файлі, спеціальна змінна середовища % RANDOM% створює псевдовипадкове число в діапазоні від 0 до 32767, засіяне часом запуску командного рядка.
echo "Так% RANDOM%!"
- Так 27525!
Щоб створити пакетний файл, який генерує випадкове число від 1 до 100:
copy con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 echo Номер, про який я думав, був% myrand%. Ви зробили це правильно?
Натисніть Ctrl + Z і Enter, щоб зберегти пакетний файл. Потім запустіть файл:
sorandom
Число, про яке я думав, було 91. Чи правильно ви це зробили?
Windows PowerShell
Командлет Get-Random генерує випадкове число від 0 до 2, 147, 483, 647 (максимальне значення беззнакового 32-бітного цілого).
Get-Random
1333190525
Командлет приймає ряд опцій, таких як мінімальне та максимальне значення. Значення округлюються вниз, тому для створення числа від 1 до 100 встановіть максимум до 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
У електронній таблиці Excel формула = RAND () буде генерувати випадкове число між 0 і 1. Наприклад, якщо ви виділите клітинку і введіть = RAND (), комірка буде містити номер, який буде змінюватися кожного разу, коли лист буде повторно розраховані.
Цей метод також працює в інших програмах електронних таблиць, включаючи LibreOffice Calc і Google Sheets.
У мовах програмування
Більшість мов програмування мають свої власні функції PRNG. Нижче наведено кілька поширених прикладів.
C
У мові програмування С функції PRNG визначені в стандартній бібліотеці, stdlib . Загальноприйнятий спосіб виникнення генератора випадкових випадків є функцією time (), оголошеною в time.h. Згенерований номер потрапляє між 0 і константою RAND_MAX, специфічним для системи цілим числом, що гарантується щонайменше 32767.
#include #include #include void main () {srand (time (NULL)); / * насіння генератора * / int rand1 = rand (); / * псевдовипадкове ціле число між 0 і RAND_MAX * / printf ("Випадкове число між 0 і% d:% d \ _", RAND_MAX, (int) rand1); / * Або в межах певного діапазону: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Випадкове число між% d і% d:% d (% f), n", min, max, round, rand2); повернення; }
Вихід:
Випадкове число від 0 до 2147483647: 1789080047 Випадкове число від 0 до 100: 74 (74.369179)
C ++
У C ++:
#include #include #include int main () {srand (time (NULL)); std :: cout << "Випадкове число між 0 і" << RAND_MAX << ":" << rand () << "" "" Випадкове число від 1 до 100: "<< (rand ()% 100) + 1 << std :: endl; return 0; }
Вихід:
Випадкове число від 0 до 2147483647: 126569208 Випадкове число від 1 до 100: 9
Python 3
Випадковий модуль у Python пропонує різні функції для генерації випадкових чисел. У цьому прикладі ми використовуємо три різні методи для пошуку випадкового цілого числа в діапазоні.
import random від datetime імпорту datetime random.seed (datetime.now ()) print ("Випадкове число в діапазоні [0, 1):", random.random ()) # У межах діапазону. Всі вони роблять те ж саме: друк ("Випадкове число від 1 до 100:", круглий (random.random () * 100) + 1) print ("Випадкове число від 1 до 100:", random.randrange (1, 101)) print ("Випадкове число від 1 до 100:", random.randint (1, 100))
Вихід:
Випадкове число в діапазоні [0, 1): 0.05137418896158319 Випадкове число від 1 до 100: 27 Випадкове число від 1 до 100: 80 Випадкове число від 1 до 100: 80
Perl 5
В Perl:
srand (час); # змінюється раз на секунду друку "Випадкове число в діапазоні [0, 1):", rand (), "\ t print "Випадкове число в діапазоні [1, 100]:", int (rand (101)), "\ t
Вихід:
Випадкове число в діапазоні [0, 1): 0, 691379946963028 Випадкове число в діапазоні [0, 100]: 82
JavaScript
console.log ("Випадкове число в діапазоні [0, 1):" + Math.random ()); console.log ("Випадкове число в діапазоні [1100]:" + Math.floor (Math.random () * 101));
Перегляд результатів у консолі JavaScript веб-переглядача (наприклад, у Firefox натисніть Ctrl + Shift + K ):
Випадкове число в діапазоні [0, 1): 0, 305008216755414 Випадкове число в діапазоні [1100]: 8
Примітка: Функцію Math.random () в JavaScript не можна насіти . Якщо вам потрібен надійний PRNG у JavaScript, перевірте кращі випадкові числа для JavaScript на GitHub.
Приклад PRNG: Віджет JavaScript
Використовуючи віджет нижче, ви можете засіяти PRNG і використовувати його для генерації випадкових чисел.
Кожен раз, коли ви генеруєте випадкове число з даного насіння, його зміщення збільшується на 1. Перше число, яке генерується з насіння, зміщує нуль, другий має зсув 1 і т.д. .
Введіть все, що потрібно, у поле, щоб створити унікальне насіння.
Використовуйте кнопку Generate, щоб отримати наступне випадкове число, використовуючи це насіння, і збільшіть зсув.
Використовуйте кнопку Скинути, щоб скинути зсув до нуля.
номер, що утворюється з насіння :
Скинути зміщення насіння (зараз 0 )
Цей віджет використовує відкриті вихідні PRNG сценарії Johannes Baagøe, Alea.js і Mash.js.
Комп'ютерна безпека, програмування, терміни програмного забезпечення