Právě jsem přemýšlel o funkci php rand() a přemýšlel, jak bych ji mohl předělat, a přišel jsem až úplně zmatený.

Jak fungují generátory náhodných čísel?

Komentáře

  • Generátory náhodných čísel pseudo používají semeno, a tabulka předdefinovaných konstant a matematických vzorců. Skutečné generátory náhodných čísel obvykle používají atmosférický šum. Náhodná čísla můžete snadno získat čtením / dev / random.
  • Je zaručeno, že atmosférický šum bude náhodný?
  • random.org má docela dobrá diskuse o náhodných číslech a o tom, jak ‚ znovu generovány .
  • function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
  • Někdo to musí udělat: xkcd.com/221 😉

Odpověď

Generátory náhodných čísel (RNG) skutečně generují pseudonáhodná čísla, protože je nemožné skutečně vygenerovat SKUTEČNÉ náhodné číslo. Jediné skutečně náhodné věci jsou činy Bože, jako blesk.

Tento článek o wikipedii vám může pomoci s vysvětlením: http://en.wikipedia.org/wiki/Random_number_generators


Podle toho, co chápu, existují v zásadě dvě části RNG: semeno a potom náhodné číslo vybrané z tohoto semene. Když semeno RNG dáváte je to ekvivalent počátečního po int. Tento výchozí bod má potom hromadu čísel, která jsou „uvnitř“ toho, ze kterého si program vybírá. V PHP můžete použít srand () k „zamíchání“ semen, takže téměř vždy dostanete jinou odpověď. Potom můžete použít rand (min., Max.) K přechodu do semene a vybrat číslo mezi min. A max. Včetně.


UPOZORNĚNÍ, MOŽNÁ SÝRNÁ ANALOGIE VEDE!

Představte si každé „semeno“ jako ledovou truhlu a náhodná čísla jako kostky ledu. Řekněme, že máte 1000 ledových truhel a každá truhla má uvnitř 1000 kostek ledu. Na okresním veletrhu si vyberou ledovou truhlu, kterou začnou používat na pití, a mohou použít pouze jednu kostku ledu. Potřebují však pouze kostky ledu větší než 1 palec kubický. Takže si náhodně vyberou truhlu mezi těmi 1000 truhly a pak si náhodně vyberou kostku ledu uvnitř té truhly. Pokud to funguje pro požadovanou velikost, použijí to. Pokud tomu tak není, vloží jej spolu s ostatními zpět do hrudníku. Pokud si to chtějí trochu užít, vymění si předem truhly za úplnou zapomnění, pokud ano!

Co se týče způsobu PHP ve skutečnosti fyzicky vybere semeno a náhodné číslo, nemám na to dostatek znalostí (což je pravděpodobně to, co vás zajímalo nejvíce!). Nechtěl bych zkusit znovu použít funkci rand (); pro většinu webových aplikací, které vytvoříte, by rand () měl stačit na jakékoli náhodné číslo, které budete potřebovat.

Zkontrolujte také lineární kongruenciál generátory, může to být více z toho, co hledáte, pokud chcete špinavé podrobnosti: http://en.wikipedia.org/wiki/Linear_congruential_generator

Doufám, že to pomůže!

Komentáře

  • Jak by byly akce god náhodné v nejmenším kousku? Navíc blesk není ani ‚ t náhodný, sleduje cestu určenou různými podmínkami. Tlumočník, který generuje toto číslo, je v podstatě irelevantní.
  • I ‚ m používám Boží skutky v právním smyslu: en.wikipedia.org/wiki/Act_of_God Jsou považovány za náhodné, protože jsou mimo zjevnou lidskou kontrolu.
  • Takže v zásadě neexistuje nic, co by bylo náhodné. To by ale vyžadovalo ovlivnění všech zdánlivě náhodných událostí, což ‚ nefunguje, když se dostanete na samý začátek času …. Vypadá to, že I ‚ vezmeme si některé třídy filozofie = D
  • @Korvin, pokud víme, kvantové jevy jako radioaktivní rozpad nebo emise fotonu vzrušeným atomem jsou skutečně náhodné . Matematici a filozofové však argumentují tím, co znamená být skutečně náhodný. A zatímco si obyčejní lidé myslí, že losování je docela náhodné, agilní kouzelníci ( news.stanford.edu/pr/2004/diaconis-69.html ) mohou pravidelně získejte 10 hlav na 10 převrácení.
  • @Charles – Hod mincí není ‚ ani binární hlava / ocas, je to ‚ ve skutečnosti hlavy / ocasy / hrany, takže opravdu dobrý jevištní kouzelník mohl dosáhnout toho, aby nespadl ani na hlavy, ani na ocasy. * 8 ‚)

Odpověď

Obvykle jsou nejsou skutečně náhodné, ale nazývají se pseudonáhodné, protože generují číselnou sekvenci, která se jeví jako náhodná. To se provádí pomocí několika zajímavých matematických vzorců. Jedním z nejběžnějších je lineární kongruentní Generátor .

Pseudonáhodná čísla mají jednu užitečnou vlastnost, že skutečná náhodná čísla nemají: pokud použijete při startu stejné semeno, dostanete zpět stejnou sekvenci. To může být pro testování velmi užitečné.

Komentáře

  • Pokud ‚ rozumím vašemu druhému tvrzení správně: random(5332) se bude vždy rovnat random(5332)?
  • @Korvin, ne, myslím tím, když zavoláte srand(5332) pak další číslo vrácené rand bude vždy stejné.
  • “ se objeví náhodně “ – > mají stejné statistické vlastnosti jako skutečně náhodná čísla.
  • +1 pro odkaz na Wikipedii LGC, má vynikající animace toho, proč mají jednoduché PRNG vážná omezení při provádění multidimenzionálních simulací Monte Carlo.

Odpověď

Jste y žádáte o Pseudorandom nebo Random? Jiní odpověděli o pseudonáhodnosti, dovolte mi promluvit o náhodě.

V prodeji byly (jsou?) Hardwarové generátory náhodných čísel. Byly založeny na čipu s malým rádiem, které měří bílý šum hlubokého kosmického záření, nebo na malém radioaktivním vzorku a měří periody mezi jeho rozpadem. Problém s nimi byla šířka pásma – množství entropie, které dokázali vygenerovat, nebylo příliš vysoké, takže byly použity pro semena pseudonáhodných algoritmů. Byly použity v bankovních systémech, vysoce zabezpečené a podobné.

OTOH, pokud se setkáte s jakýmkoli vývojářem vestavěných systémů, budou se jim smát. Pro běžné účely při programování mikrokontroléru bude čtení nízkých 4 bitů libovolného 16bitového analogově-digitálního převodníku s plovoucím (nepřipojeným) kolíkem produkovat naprosto dobrý náhodný šum, při více než dostatečné šířce pásma (čím kratší je období dotazování, tím více je hlučný odečet) a jednodušší než psaní skutečné rutiny RNG. A vzhledem k tomu, že ADC se běžně vyskytují implementovány v křemíku mikrokontrolérů, běžně implementovány a často implementovány s 8 kanálů, z nichž pro vaši aplikaci potřebujete možná 5, je to prakticky zdarma.

A i když nemáte ADC, pár prvků připojených k digitálnímu GPIO pinu vyprodukuje docela dobrý hluk. V integrovaném režimu je šum ev e-přítomný (a neustále bojoval), a tak získání skutečné opravdové náhodnosti je velmi snadné.

Odpověď

Existuje mnoho způsobů pokusit se napodobit „náhodnou“ posloupnost čísel. Vaše první zastávka by měla být určitě o lineárních shodných generátorech . Takto fungují nejzákladnější generátory náhodných čísel a vsadím se na to, jak funguje funkce PHP rand ().

Zajímavější další otázkou k zamyšlení je, jak se osazuje sama? Čas ? IP adresa? Atd.

Komentáře

  • Semeno je to, co mě mate, mohu ‚ nenapadá nic, co by mohlo funkci naočkovat bez nějakého vzoru, ai když ne, tak co způsobuje generování náhodného semene na prvním místě!
  • Věřím, že časová značka je často používá se jako počáteční semeno, když žádný není poskytován z jiného zdroje. Ve starém jazyce BASIC byl RANDOMIZE TIMER běžný idiom a “ dobrý dost “ pro většinu (ne kryptografických) účelů. Podle man 3 srand používá knihovna GNU C pevné semeno 1, dokud není znovu nasazeno PRNG.

Odpověď

Nejprve ze všeho, prakticky všechny rand() funkce neposkytují skutečnou náhodnost, spíše poskytují takzvaná pseudonáhodná čísla.

Jak tedy fungují generátory pseudonáhodných čísel? V zásadě stejným způsobem, jako funguje šifrování: Máte funkci (hash), která přebírá nějaký vstup a produkuje nějaký výstup tak složitým způsobem, že z výstupu není možné uhodnout vstup nebo naopak. To znamená, každý cypher lze použít k vytvoření poměrně dobrého pseudonáhodného generátoru. Přestože k šifrování můžete použít jakýkoli pseudonáhodný generátor, většina generátorů pseudonáhodných čísel je primárně vyvinuta pro rychlost, nikoli pro kryptografickou bezpečnost, takže nebude hackerům dávat žádné bolesti hlavy.

U pseudonáhodného generátoru se hashovací funkce použije na nějaký skrytý vnitřní stav generátoru a jeho výstup se použije k a) úpravě tohoto vnitřního stavu a b) vypočítat výstup funkce rand(). Při příštím vyvolání rand() se použije tento změněný vnitřní stav, a tím se získá jiný výsledek. Čím lepší hashovací funkce, tím méně snadno lze výsledky odlišit od skutečných náhodných čísel.


Ve skutečnosti mají dnes počítače přístup ke skutečným náhodným číslům: Vycházejí z chvění při načasování přerušení způsobeného externími zařízeními. Linux používá tyto hodnoty malé nejistoty k neustálému míchání „entropického fondu“, což je jen několik kilobajtů vnitřního stavu. Kryptografické hashe založené na tomto fondu entropie jsou dostupné prostřednictvím zařízení /dev/random a /dev/urandom. Přístup k některým opravdu dobrým náhodným číslům je tedy stejně snadný jako otevření jednoho z těchto dvou zařízení a čtení několika bytů z nich.

Odpovědět

Náhodná čísla jsou čísla generovaná procesem, jehož výstup je nepředvídatelný. tj. nemůžeme říci, co bude dalším výstupem. Můžeme si vzít jednoduchý příklad výsledku kostek. Co bude na výstupu, když hodíme kostkou, je nepředvídatelné.

Existují dva typy náhodných čísel 1. Pravá náhodná čísla 2. Pseudo náhodná čísla.

Jak jsou generována náhodná čísla

Komentáře

  • Pomocí formátování citací zvýrazněte, které části odpověď je vaše a která pochází ze zdroje, který citujete. Pokud je vaší odpovědí pouze kopírování / vkládání z externího zdroje, ‚ to zde není dobrá odpověď.
  • toto Zdá se, že nenabízí nic podstatného nad body, které byly vysvětleny v předchozích 6 odpovědích

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *