Шта је Псеудо-случајно?

Псеудо-случајни бројеви се генеришу помоћу рачунара. Они нису истински случајни, јер када компјутер функционише исправно, није ништа случајно. Рачунари су детерминистички уређаји - понашање рачунара је у потпуности предвидљиво. Да би се створило нешто непредвидљиво, компјутери користе математичке алгоритме за производњу бројева који су "довољно случајни".

Псеудо-случајни бројеви су битни за многе рачунарске апликације, као што су игре и сигурност. У играма, случајни бројеви пружају непредвидиве елементе на које играч може одговорити, као што је избјегавање случајног метка или цртање картице са врха палубе.

У безбедности рачунара, псеудо-случајност је важна у алгоритмима шифровања, који стварају кодове који се не смеју предвидети или погодити.

Шта је ПРНГ?

Генератор псеудо-случајних бројева, или ПРНГ, је било који програм или функција, који користи математику за симулацију случајности. Такође се може назвати ДРНГ (дигитални генератор случајних бројева) или ДРБГ (детерминистички генератор случајних бројева).

Математика понекад може бити сложена, али у принципу, употреба ПРНГ-а захтијева само два корака:

  1. Дајте ПРНГ произвољним сјеменом.
  2. Затражите следећи случајни број.

Вредност семена је "полазна тачка" за стварање случајних бројева. Вредност се користи приликом израчунавања бројева. Ако се семенска вредност промени, генерисани бројеви се такође мењају, а појединачна семенска вредност увек производи исте бројеве. Из тог разлога, бројеви нису стварно случајни, јер се права случајност никада није могла поново створити.

Тренутно време се често користи као јединствена семенска вредност. На пример, ако је то 5. март 2018. у 17:03 и 7.01324 секунди УТЦ, то се може изразити као цео број. То тачно време се никада неће поновити, тако да ће ПРНГ са тим семеном произвести јединствени скуп случајних бројева.

Напомена: Бити у стању репродуковати насумично генерисану секвенцу. У академским апликацијама, може се генерисати масивна секвенца случајних вредности за симулацију, а затим репродуковати тачно за детаљнију анализу касније. Као још један пример, у компјутерским играма, ако играч учита сачувану игру, било који "случајни" догађај може бити исти као да игра никада није престала. На тај начин играч више пута не може поново да учита исту игру да би покушао да добије више среће.

Како генерисати псеудо-случајан број

Слиједи неколико начина на које можете креирати псеудо-случајан број у заједничким програмима и програмским језицима.

Виндовс Цомманд Промпт

На Виндовс командној линији, или у батцх фајлу, специјална променљива окружења % РАНДОМ% производи псеудо-случајан број између 0 и 32767, засадјен са временом које је покренута командна линија.

 ецхо "Тако% РАНДОМ%!" 
 "Дакле 27525!" 

Да бисте креирали скупну датотеку која генерише случајни број између 1 и 100:

 цопи цон сорандом.бат ецхо офф сет / миранд =% РАНДОМ% * 100/32768 + 1 ецхо Број на који сам мислио је% миранд%. Јеси ли добро схватио? 

Притисните Цтрл + З и Ентер да бисте сачували батцх датотеку. Затим извршите датотеку:

 сорандом 
 Број на који сам мислио је 91. Да ли сте га добро схватили? 

Виндовс ПоверСхелл

Гет-Рандом цмдлет генерише случајни број између 0 и 2, 147, 483, 647 (максимална вредност непотписаног 32-битног целог броја).

 Гет-Рандом 
 1333190525 

Цмдлет траје неколико опција, као што су минимална и максимална вредност. Вредности се заокружују на доле, тако да за генерисање броја између 1 и 100 поставите максимум на 101:

 Гет-Рандом -Минимум 1 -Макимум 101 
 99 

Мицрософт Екцел

У Екцел табели, формула = РАНД () ће генерисати случајни број између 0 и 1. На пример, ако означите ћелију и унесете = РАНД (), ћелија ће садржати број који ће се мењати када се лист поново појави -израчунато.

Овај метод такође функционише у другим апликацијама за табеларне прорачуне, укључујући ЛибреОффице Цалц и Гоогле табеле.

У програмским језицима

Већина програмских језика има своје ПРНГ функције. Ево неколико уобичајених примера:

Ц

У Ц програмском језику, ПРНГ функције су дефинисане у стандардној библиотеци, стдлиб . Уобичајени начин да се насумице насумични генератор је са функцијом тиме (), декларисаном у тиме.х. Генерисани број пада између 0 и константе РАНД_МАКС, системски специфичан број гарантован је најмање 32767.

 #инцлуде #инцлуде #инцлуде воид маин () {сранд (тиме (НУЛЛ)); / * семе генератор * / инт ранд1 = ранд (); / * псеудослучајни број између 0 и РАНД_МАКС * / принтф ("Случајни број између 0 и% д:% д \ _", РАНД_МАКС, (инт) ранд1); / * Или, унутар одређеног опсега: * / инт мин = 0; инт мак = 100; флоат ранд2 = (флоат) ранд () * мак / РАНД_МАКС + 1; инт роунд = (инт) ранд2; принтф ("Случајни број између% д и% д:% д (% ф)", мин, мак, роунд, ранд2); ретурн; } 

Излаз:

 Насумични број између 0 и 2147483647: 1789080047 Случајни број између 0 и 100: 74 (74.369179) 

Ц ++

У Ц ++:

 #инцлуде #инцлуде #инцлуде инт маин () {сранд (тиме (НУЛЛ)); стд :: цоут << "Случајни број између 0 и" << РАНД_МАКС << ":" << ранд () << "" "" Случајни број између 1 и 100: "<< (ранд ()%) 100) + 1 << стд :: ендл; ретурн 0; } 

Излаз:

 Насумични број између 0 и 2147483647: 126569208 Случајни број између 1 и 100: 9 

Питхон 3

Случајни модул у Питхону нуди различите функције за генерисање случајних бројева. У овом примеру, користимо три различите методе за проналажење случајног броја у опсегу.

 импорт случајно из датетиме импорт датетиме рандом.сеед (датетиме.нов ()) принт ("Случајни број у опсегу [0, 1):", рандом.рандом ()) # Унутар опсега. Ово све ради исту ствар: принт ("Рандом нумбер између 1 и 100:", роунд (рандом.рандом () * 100) + 1) принт ("Рандом нумбер фром 1 анд 100:", рандом.рандранге (1, 101)) принт ("Случајни број између 1 и 100:", рандом.рандинт (1, 100)) 

Излаз:

 Насумични број у опсегу [0, 1): 0.05137418896158319 Насумични број између 1 и 100: 27 Случајни број између 1 и 100: 80 Случајни број између 1 и 100: 80 

Перл 5

Ин Перл:

 сранд (време); # промена једном у секунди принт "Насумични број у опсегу [0, 1):", ранд (), "\ т принт "Случајни број у опсегу [1, 100]:", инт (ранд (101)), "\ т 

Излаз:

 Случајни број у опсегу [0, 1): 0, 691379946963028 Случајни број у опсегу [0, 100]: 82 

ЈаваСцрипт

 цонсоле.лог ("Случајни број у опсегу [0, 1):" + Матх.рандом ()); цонсоле.лог ("Случајни број у опсегу [1, 100]:" + Матх.флоор (Матх.рандом () * 101)); 

Погледајте излаз у конзоли ЈаваСцрипта вашег веб прегледача (на пример, у Фирефок-у притисните Цтрл + Схифт + К ):

 Случајни број у опсегу [0, 1): 0, 305008216755414 Случајни број у опсегу [1, 100]: 8 

Напомена: Функција Матх.рандом () у ЈаваСцрипт-у није могућа. Ако вам је потребан робустан ПРНГ у ЈаваСцрипту, провјерите боље случајне бројеве за ЈаваСцрипт на ГитХубу.

Пример ПРНГ: ЈаваСцрипт видгет

Помоћу видгета у наставку, можете сејати ПРНГ и користити га за генерисање случајних бројева.

Сваки пут када генеришете случајни број из датог семена, његов офсет се повећава за 1. Први број генерисан од семена је помак нула, други има помак 1, итд. Генератор увек производи исти број за дати семе и офсет .

Унесите све што желите у поље да бисте креирали јединствено семе.

Користите дугме Генерирај да бисте добили следећи случајни број помоћу тог семена и повећајте офсет.

Користите дугме Ресет да бисте ресетовали офсет на нулу.

број генерисан из семена :

Поништи помак сјемена (тренутно 0 )

Овај видгет користи отворени извор Јоханнес Баагøе ПРНГ скрипте, Алеа.јс и Масх.јс.

Рачунарска безбедност, програмирање, софтверски термини