Nuo ko pradėti
Skaitykite, kas yra atsitiktinių skaičių generatorius: aparatiniai, pseudatsitiktiniai ir kriptografiškai saugūs generatoriai, kodėl skaičiai kartojasi ir ką siūlo naršyklė. Kai jums reikia ne paaiškinimo, o skaičių, atsitiktinių skaičių generatorius sugeneruoja juos naršyklėje bet kuriame intervale, su pasikartojimais arba be jų.
Kur generatoriai nepastebimai suklysta
Patikimas atsitiktinumo šaltinis yra tik pusė darbo. Kita pusė — neapdorotų reikšmių perkėlimas į jūsų intervalą, ir būtent čia suklumpa daugelis savadarbių generatorių. Paimti reikšmės dalybos iš intervalo dydžio liekaną atrodo akivaizdus būdas, tačiau jis sukelia paslėptą netolygumą: jei šaltinio reikšmių aibė nesidalija iš intervalo dydžio be liekanos, mažiausi intervalo skaičiai iškrenta šiek tiek dažniau nei kiti. Šis trūkumas vadinamas liekanos poslinkiu (angl. modulo bias). Viena iš išeičių yra atmetimo atranka (angl. rejection sampling): atmesti reikšmes, patenkančias į netolygią liekanos dalį, ir traukti iš naujo. Mūsų generatorius būtent taip ir daro, todėl kiekvienas jūsų intervalo skaičius per kiekvieną traukimą turi visiškai vienodą galimybę.
Dėl tos pačios priežasties netinka ir paprasčiausi sprendimai, kuriuos žmonės pasitelkia pirmiausia. Math.random() neturi jokių saugumo garantijų, o skaičiuoklių funkcijos, tokios kaip RAND() ir RANDBETWEEN(), priklauso tai pačiai kategorijai: jos tinka apytiksliam sumaišymui, tačiau visiškai netinka situacijoms, kurias kas nors galėtų užginčyti.
Skaičiai, sąrašai ir kauliukai
Atsitiktinių skaičių generatorius pateikia skaičius iš jūsų nurodyto intervalo. Atsitiktinis pasirinkimas iš sąrašo dirba su jūsų įklijuotu sąrašu — vardais, įrašais, parinktimis — todėl jums niekada nereikės rankiniu būdu susieti skaičių su eilutėmis. Stalo žaidimams kauliukų generatorius meta kauliukus ir susumuoja taškus, o renkantis iš dviejų variantų pakanka monetos metimo. Kai atsitiktinumas turi ką nors apsaugoti, o ne nuspręsti, naudokite saugų slaptažodžių generatorių. Visi jie naudoja tą patį kriptografiškai saugų šaltinį jūsų naršyklėje.