Gadījuma skaitļu ģenerators tiešsaistē

Acrafto Team Matemātika
Atjaunināts
Ātrie sagatavotie iestatījumi
Viss notiek jūsu pārlūkā. Neviens skaitlis nekad nepamet jūsu ierīci.

Kā darbojas gadījuma skaitļu ģenerators?

Ģenerators piedāvā divus nejaušības avotus, un jūs izvēlaties, kurš der jūsu uzdevumam.

Drošā izloze iegūst entropiju no jūsu operētājsistēmas, izmantojot Web Crypto API (crypto.getRandomValues()). Tā ir neparedzama un neatkārtojama — pareizā izvēle reālai izlozei, kurā nevienam nedrīkst būt iespējas iepriekš uzminēt rezultātu.

Ar sēklu pārvērš jebkuru jūsu ievadīto tekstu par sākuma stāvokli deterministiskam ģeneratoram (xoshiro128**). Viena un tā pati sēkla vienmēr dod tos pašus skaitļus, tāpēc jebkurš var atkārtot jūsu izlozi un pārliecināties, ka rezultāts atbilst apgalvotajam.

Abi režīmi darbojas pilnībā jūsu pārlūkprogrammā. Neviens skaitlis nekad nenonāk serverī.

Bez moduļa novirzes (modulo bias)

Lielākā daļa vienkāršo ģeneratoru attēlo nejaušu 32 bitu vērtību jūsu diapazonā, izmantojot value % range. Ja diapazons nedalās vienmērīgi ar 2³², zemākie skaitļi parādās nedaudz biežāk nekā pārējie. Pēc tūkstošiem izložu šī novirze ir izmērāma.

Šis ģenerators tā vietā izmanto noraidīšanas izlasi (rejection sampling): vērtības, kas iekristu nevienmērīgajā “astē”, tiek atmestas un izvilktas no jauna. Katram skaitlim jūsu diapazonā ir tieši vienādas izredzes. To varat pārbaudīt paši, izmantojot iebūvēto vienmērīguma testu.

Ko ģenerators prot

Diapazons

  • Minimums un maksimums — jebkurš vesels vai decimāls diapazons, ieskaitot negatīvas vērtības
  • Cik skaitļu — no 1 līdz pat 1 000 000 vienā izlozē
  • Bez atkārtojumiem — katrs skaitlis parādās ne vairāk kā vienu reizi, tāpat kā reālā izlozē
  • Kārtošana — izlozes secība, augoša vai dilstoša; kārtošana nekad neietekmē nejaušību
  • Solis — ierobežot rezultātus līdz vērtības daudzkārtņiem, lai izkristu tikai, piemēram, 0, 5, 10, 15
  • Izslēgt skaitļus — uzskaitiet vērtības, kuras nekad nedrīkst tikt izlozētas

Režīms

  • Nejaušības avots — drošs (Web Crypto) vai ar sēklu (atkārtojams)
  • Sēkla — jebkurš teksts; viena un tā pati sēkla vienmēr atkārto to pašu izlozi
  • Sadalījums — vienmērīgs, normālais (Gausa), eksponenciālais, Puasona, trijstūrveida, binomiālais
  • Svari — piešķiriet izvēlētiem skaitļiem lielākas izredzes, pierakstot kā number:weight
  • Kauliņu apzīmējumi3d6+2, d20, 2d20kh1 priekšrocībai (advantage), 4d6dl1 raksturlielumu metšanai

Izvade

  • Atdalītājs — komats, atstarpe, semikols, tabulēšana, jauna rinda vai jebkas, ko ierakstāt
  • Skaitļu sistēma — decimālā, binārā, oktālā, heksadecimālā vai bāze 36
  • Papildināt ar nullēm — pārvērst 7 par 007 biļešu vai ID numuriem
  • Prefikss un sufikss — ietvert katru skaitli fiksētā tekstā
  • Veidne{n} ir skaitlis, {i} tā pozīcija, tāpēc user{n} kļūst par user42
  • Kopēt kā — vienkāršu tekstu, CSV, JSON vai Markdown tabulu

Statistika

Katra izloze tiek apkopota reāllaikā: summa, vidējais, mediāna, mazākais, lielākais, standartnovirze, kā arī cik rezultātu ir pāra, nepāra vai pirmskaitļi. Histogramma parāda sadalījuma formu, un hī-kvadrāta tests parāda, vai rezultāti patiešām atbilst vienmērīgam sadalījumam.

Vēsture

Pēdējās 50 izlozes tiek saglabātas jūsu pārlūkprogrammā kopā ar iestatījumiem, kas tās radīja — ar vienu klikšķi varat atjaunot jebkuru no tām. Bieži lietotus iestatījumus var saglabāt kā nosauktas veidnes (presets), un visu kopumu var eksportēt uz JSON failu, ko importēt citā ierīcē. Nekas netiek glabāts nekur citur, tikai šajā pārlūkprogrammā.

Tastatūra

Nospiediet Atstarpi vai R, lai izlozētu vēlreiz, nesniedzoties pēc peles.

Ātrās priekšizvēles

PriekšizvēleDiapazonsSkaitsIzmantošana
🎲 Kauliņš1–61Galda spēles, lēmumu pieņemšana
🪙 Monēta0–11Cifra vai raksts
🎰 Loterija1–496Unikāli, sakārtoti, kā reālā izlozē
💯 1–1001–1001Procenti, A/B sadalījumi
🔢 PIN0–94Četri cipari, atkārtojumi atļauti

Atkārtojamas izlozes

Režīms “ar sēklu” pastāv brīžiem, kad “tici man, tas bija nejauši” nav pietiekami.

Izvēlieties sēklu, par kuru visi var vienoties jau iepriekš — datumu, tēmturi, kāda publiska cenu slēguma vērtību — un paziņojiet to pirms izlozes. Ikviens tad var ievadīt to pašu sēklu ar tiem pašiem iestatījumiem un iegūt identisku rezultātu. Jūs neesat pierādījuši, ka skaitļi bija neparedzami; jūs esat pierādījuši, ka nepārlozējāt, kamēr patika rezultāts.

Tas ir arī veids, kā padarīt nejaušību atkārtojamu darbā, kas jāpārbauda: izlases plānu, ko kolēģis var palaist atkārtoti, testa datu kopu, kas paliek nemainīga visā testu komplektā, klases uzdevumu, kurā katrs skolēns saņem tos pašus “nejaušos” datus.

Sadalījuma izvēle

Vienmērīgais dod katram skaitlim diapazonā vienādas izredzes. Tas parasti ir tas, ko cilvēki domā ar “nejaušs”, un tas ir noklusējuma iestatījums.

Pārējie grupē rezultātus ap kādu vērtību, kas ir raksturīgi reālās pasaules lielumiem:

  • Normālais (Gausa) — augums, mērījumu kļūdas, testu rezultāti. Iestatiet vidējo vērtību un standartnovirzi.
  • Eksponenciālais — gaidīšanas laiki starp neatkarīgiem notikumiem.
  • Puasona — notikumu skaits noteiktā intervālā: ierašanās stundā, defekti partijā.
  • Trijstūrveida — kad zināt minimumu, maksimumu un visticamāko vērtību, bet neko citu. Bieži izmanto projektu novērtējumos.
  • Binomiālais — veiksmju skaits no fiksēta izmēģinājumu skaita ar fiksētu varbūtību.

Katrs sadalījums tiek nogriezts pie jūsu iestatītā diapazona, tāpēc gara Gausa sadalījuma aste nevar izkļūt ārpus jūsu minimuma un maksimuma.

Kur tiek izmantoti gadījuma skaitļi

Spēles un izklaide

  • Galda spēles — kauliņu mešana, gājienu secība
  • Galda lomu spēles (RPG)4d6dl1 raksturlielumiem, 2d20kh1 priekšrocībai
  • Izlozes — uzvarētāja izvēle, ar sēklu, lai dalībnieki to varētu pārbaudīt
  • Viktorīnas — nejauša jautājumu secība

Statistika un zinātne

  • Paraugu ņemšana — parauga izvilkšana no populācijas bez atkārtojumiem
  • A/B testēšana — dalībnieku sadalīšana grupās
  • Montekarlo simulācija — varbūtības novērtēšana ar atkārtošanu
  • Bootstrapping — atkārtota paraugu ņemšana nenoteiktības novērtēšanai

Izstrāde

  • Testa dati — miljons vērtību, ģenerētas fonā, lai lapa saglabātu atsaucību
  • Fikstūras (fixtures) — ar sēklu, lai neveiksmīgs tests neizdodas vienādi katru reizi
  • Nejaušie ID — ar papildināšanu, prefiksiem vai veidni
  • Slodzes testēšana — veidnē balstīti identifikatori, piemēram, user{n}@example.com

Patiesi un pseidonejauši skaitļi

Math.random()crypto.getRandomValues()Ar sēklu (xoshiro128**)
TipsPseidonejaušsKriptogrāfiski drošsPseidonejaušs, deterministisks
Entropijas avotsDzinēja izvēlēta sēklaSistēmas CSPRNGJūsu sēklas teksts
Paredzams?IespējamsJā, pēc konstrukcijas
Atkārtojams?Vienmēr
Piemērots drošībai
Piemērots statistikaiAtkarīgs
Piemērots pārbaudāmām izlozēm

Math.random() šajā rīkā netiek izmantots nekur.

Izlozes bez atkārtojumiem

Ar ieslēgtu opciju Bez atkārtojumiem katrs skaitlis diapazonā parādās ne vairāk kā vienu reizi. Ideāli piemērots:

  • Izlozes — neviens nevar uzvarēt divreiz
  • Permutācijas — priekšmetu kopas sajaukšana
  • Bingo — izsaukto skaitļu saglabāšana kā izsauktus
  • Loterija — seši dažādi skaitļi no 1 līdz 49

Izloze izmanto daļēju Fisher–Yates jaukšanu, tāpēc 6 skaitļu pieprasīšana no miljona ir tikpat ātra kā 6 skaitļu pieprasīšana no 49 — tā nekad necikliski nemēģina izvairīties no sadursmes. Ja pieprasāt vairāk unikālu skaitļu, nekā diapazons var nodrošināt, ģenerators to paziņo, nevis iesalst.

Rezultātu eksportēšana

Kopējiet skaitļus kā vienkāršu tekstu ar jebkuru vēlamo atdalītāju, kā CSV izklājlapai, kā JSON kodam vai kā Markdown tabulu dokumentācijai. Ļoti lielas izlozes pilnībā paliek atmiņā un tiek kopētas pilnībā, lai gan uz ekrāna tiek izlozēti tikai pirmie pāris tūkstoši.

Gadījuma skaitļu ģenerēšana savā kodā

JavaScript / TypeScript

// Kriptogrāfiski drošs vesels skaitlis diapazonā [min, max] bez moduļa novirzes.
// Vienkāršais `value % range` dod priekšroku zemām vērtībām, ja diapazons
// nedalās vienmērīgi ar 2**32 - tāpēc mēs noraidām vērtības nevienmērīgajā astē.
function randomInt(min, max) {
  const range = max - min + 1;
  const limit = Math.floor(0x100000000 / range) * range;
  const arr = new Uint32Array(1);
  let value;
  do {
    crypto.getRandomValues(arr);
    value = arr[0];
  } while (value >= limit);
  return min + (value % range);
}

Python

import random
import secrets

# Kriptogrāfiski drošs, bez moduļa novirzes
n = secrets.randbelow(max - min + 1) + min

# Atkārtojams: viena un tā pati sēkla vienmēr dod to pašu secību
rng = random.Random('my-seed')
n = rng.randint(min, max)

# Bez atkārtojumiem
sample = random.sample(range(min, max + 1), count)

PHP

// Kriptogrāfiski drošs (PHP 7+), bez moduļa novirzes
$n = random_int($min, $max);

// Atkārtojams
mt_srand(crc32('my-seed'));
$n = mt_rand($min, $max);

Biežāk uzdotie jautājumi (BUJ)

Vai rezultāts ir patiešām nejaušs? Drošajā režīmā — jā. Tas nāk no crypto.getRandomValues(), kriptogrāfiski droša ģeneratora, ko baro jūsu operētājsistēmas entropijas krātuve. Rezultāti ir vienmērīgi sadalīti un neparedzami. Režīms ar sēklu apzināti ir pretējs: tas ir atkārtojams, un tas arī ir tā jēga.
Cik skaitļu es varu ģenerēt vienlaicīgi? Līdz 1 000 000. Izlozes virs 50 000 tiek aprēķinātas fona darba pavedienā (worker), lai lapa saglabātu atsaucību, un ekrānā parādās pirmie 2 000 kopā ar atlikušo skaitu — kopēšana joprojām dod visu.
Vai es varu ģenerēt negatīvus skaitļus? Jā. Iestatiet negatīvu minimumu. Darbojas viss JavaScript skaitļu diapazons, ieskaitot negatīvus diapazonus abos galos.
Vai kārtošana ietekmē nejaušību? Nē. Skaitļi vispirms tiek izlozēti un pēc tam sakārtoti. Kārtošana maina tikai secību, kādā tos redzat.
Vai viena un tā pati sēkla rīt dos tos pašus skaitļus? Jā, arī jebkurā citā ierīcē vai pārlūkprogrammā. Ģenerators ar sēklu ir pilnībā deterministisks un atkarīgs vienīgi no jūsu sēklas un iestatījumiem.
Ko man pasaka vienmērīguma tests? Tas veic hī-kvadrāta testu, salīdzinot, cik bieži katrs skaitlis patiešām parādījās, ar to, cik bieži tam vajadzēja parādīties. Ja statistikas vērtība paliek zem kritiskās vērtības, rezultāti atbilst vienmērīgam sadalījumam. Lai tas ko nozīmīgu pateiktu, nepieciešams samērā šaurs diapazons un pietiekami daudz izložu — vismaz piecas uz katru iespējamo vērtību.
Kā darbojas svari? Ierakstiet tos kā number:weight pārus, piemēram, 1:5, 2:1, 3:1. Šeit 1 ir piecas reizes ticamāks nekā 2 vai 3. Skaitļiem, kurus neuzskaitāt, tiek piešķirts svars nulle, un tie nekad netiek izlozēti.
Kādi kauliņu apzīmējumi tiek atbalstīti? 3d6 met trīs sešpusējus kauliņus. Pievienojiet modifikatoru ar 3d6+2. Paturiet vai atmetiet kauliņus ar kh, kl, dh, dl — tā 2d20kh1 patur augstāko no diviem d20 (priekšrocība/advantage), un 4d6dl1 atmet zemāko no četriem d6.
Vai mana vēsture kaut kur tiek glabāta? Tikai šajā pārlūkprogrammā, vietējā krātuvē (local storage). Tā nekad nesasniedz serveri, nekad nesinhronizējas ar citu ierīci un pazūd, ja notīrāt savas vietnes datus. Eksportējiet to uz JSON, ja vēlaties to saglabāt vai pārnest.

Es novērtētu, ja jūs dalītos ar šīm lapām ar draugiem, saglabātu tās grāmatzīmēs vai linkotu uz tām. Paldies! 🙏