Satunnaislukugeneraattori

Acrafto Team Matematiikka
Päivitetty
Pikavalinnat
Kaikki tapahtuu selaimessasi. Yksikään luku ei koskaan poistu laitteeltasi.

Miten satunnaislukugeneraattori toimii?

Generaattori tarjoaa kaksi satunnaisuuden lähdettä, ja voit valita kumpi sopii tehtävään.

Turvallinen satunnaisuus hakee entropian käyttöjärjestelmästäsi Web Crypto API:n kautta (crypto.getRandomValues()). Se on ennustamaton ja toistumaton — oikea valinta oikeaan arvontaan, jossa kenenkään ei pidä pystyä arvaamaan lopputulosta etukäteen.

Siemenluku (seeded) muuttaa kirjoittamasi tekstin deterministisen generaattorin (xoshiro128**) alkutilaksi. Sama siemen tuottaa aina samat luvut, joten kuka tahansa voi toistaa arvontasi ja vahvistaa, että sait sen mitä väität saaneesi.

Molemmat toimivat kokonaan selaimessasi. Yksikään luku ei koskaan kulkeudu palvelimelle.

Ei modulo-vinoumaa

Useimmat yksinkertaiset generaattorit kuvaavat satunnaisen 32-bittisen arvon halutulle alueelle laskukaavalla arvo % alue. Kun alue ei jakaudu tasan lukuun 2³², pienimmät luvut esiintyvät hieman muita useammin. Tuhansien arvontojen yli tämä on mitattavissa.

Tämä generaattori käyttää sen sijaan hylkäysotantaa (rejection sampling): epätasaiseen häntään osuvat arvot hylätään ja arvotaan uudelleen. Jokaisella alueen luvulla on täsmälleen sama todennäköisyys. Voit vahvistaa tämän itse sisäänrakennetulla tasajakaumatestillä.

Mitä generaattori osaa

Alue

  • Minimi ja maksimi — mikä tahansa kokonaisluku- tai desimaalialue, negatiiviset arvot mukaan lukien
  • Lukujen määrä — 1:stä aina 1 000 000:een yhdellä arvonnalla
  • Ei toistoja — jokainen luku esiintyy korkeintaan kerran, kuten oikeassa arvonnassa
  • Lajittelu — arvontajärjestys, nouseva tai laskeva; lajittelu ei koskaan vaikuta satunnaisuuteen
  • Askel — rajaa tulokset tietyn arvon monikertoihin, jolloin esiin tulee vain esim. 0, 5, 10, 15
  • Poissuljetut luvut — luettele arvot, joita ei saa koskaan arpoa

Tila

  • Satunnaisuuden lähde — turvallinen (Web Crypto) tai siemenluku (toistettava)
  • Siemen — mikä tahansa teksti; sama siemen toistaa aina saman arvonnan
  • Jakauma — tasajakauma, normaali (Gaussin), eksponentiaalinen, Poisson, kolmio, binomi
  • Painot — anna valituille luvuille suurempi todennäköisyys muodossa luku:paino
  • Noppanotaatio3d6+2, d20, 2d20kh1 etulyöntiasemaa varten, 4d6dl1 hahmon ominaisuuksien heittoon

Tuloste

  • Erotin — pilkku, välilyönti, puolipiste, sarkain, rivinvaihto tai mikä tahansa kirjoittamasi merkki
  • Lukujärjestelmä — desimaali, binääri, oktaali, heksadesimaali tai kantaluku 36
  • Nollatäyttö — muuta 7 muotoon 007 lippu- tai tunnusnumeroita varten
  • Etuliite ja jälkiliite — kääri jokainen luku kiinteän tekstin sisään
  • Malline{n} on luku, {i} sen sijainti, joten user{n} muuttuu muotoon user42
  • Kopioi muodossa — pelkkä teksti, CSV, JSON tai Markdown-taulukko

Tilastot

Jokainen arvonta tiivistetään reaaliajassa: summa, keskiarvo, mediaani, pienin, suurin, keskihajonta sekä parillisten, parittomien ja alkulukujen määrä. Histogrammi näyttää jakauman muodon, ja khiin neliö -testi kertoo, vastaavatko tulokset todella tasajakaumaa.

Historia

Selaimeesi tallentuu 50 viimeisintä arvontaa asetuksineen — yhdellä klikkauksella palautat minkä tahansa niistä. Usein käytetyt asetukset voi tallentaa nimettyinä esiasetuksina, ja koko kokoelman voi viedä JSON-tiedostoon ja tuoda toisella laitteella. Mitään ei tallenneta muualle kuin tähän selaimeen.

Näppäimistö

Paina välilyöntiä tai R-näppäintä arvotaksesi uudelleen ilman hiirtä.

Pika-asetukset

EsiasetusAlueMääräKäyttö
🎲 Noppa1–61Lautapelit, päätöksenteko
🪙 Kolikko0–11Kruuna tai klaava
🎰 Lotto1–496Yksilölliset, lajitellut, kuten oikeassa arvonnassa
💯 1–1001–1001Prosentit, A/B-jaot
🔢 PIN0–94Neljä numeroa, toistot sallittu

Toistettavat arvonnat

Siemenlukutila on olemassa niitä hetkiä varten, jolloin “luota vain, se oli satunnaista” ei riitä.

Sovi siemenestä etukäteen kaikkien kesken — päivämäärä, hashtag, jonkin julkisen tiedon päätöskurssi — ja ilmoita se ennen arvontaa. Kuka tahansa voi sitten kirjoittaa saman siemenen samoilla asetuksilla ja saada identtisen tuloksen. Et ole todistanut, että luvut olivat ennustamattomia; olet todistanut, ettet arponut uudelleen kunnes tulos miellytti.

Näin tehdään satunnaisuudesta toistettavaa myös työssä, joka on tarkistettavissa: näytteenottosuunnitelma, jonka kollega voi ajaa uudelleen, testidata, joka pysyy vakaana testien ajossa, tai luokkaharjoitus, jossa jokainen oppilas saa saman “satunnaisen” datan.

Jakauman valinta

Tasajakauma antaa jokaiselle alueen luvulle saman todennäköisyyden. Se on se, mitä ihmiset yleensä tarkoittavat satunnaisuudella, ja se on oletusasetus.

Muut kasaavat tuloksia tietyn arvon ympärille, mikä on tyypillistä todellisen maailman suureille:

  • Normaali (Gaussin) — pituudet, mittausvirheet, koetulokset. Aseta keskiarvo ja keskihajonta.
  • Eksponentiaalinen — riippumattomien tapahtumien väliset odotusajat.
  • Poisson — tapahtumien lukumäärä kiinteällä aikavälillä: saapumiset tunnissa, viat erässä.
  • Kolmio — kun tiedät minimin, maksimin ja todennäköisimmän arvon, mutta ei muuta. Yleinen projektiarvioissa.
  • Binomi — onnistumiset kiinteällä koesarjan pituudella ja kiinteällä todennäköisyydellä.

Jokainen jakauma leikataan asettamallesi alueelle, joten pitkä Gaussin häntä ei voi karata minimisi ja maksimisi ulkopuolelle.

Mihin satunnaislukuja käytetään

Pelit ja viihde

  • Lautapelit — noppien heittäminen, vuorojärjestys
  • Pöytäroolipelit4d6dl1 ominaisuusarvoihin, 2d20kh1 etulyöntiasemaan
  • Arvonnat — voittajan valinta, siemenellä jotta osallistujat voivat vahvistaa sen
  • Visat — satunnainen kysymysjärjestys

Tilastot ja tiede

  • Otanta — näytteen arpominen populaatiosta ilman toistoja
  • A/B-testaus — osallistujien jakaminen ryhmiin
  • Monte Carlo -simulaatio — todennäköisyyden arviointi toistolla
  • Bootstrapping — uudelleennäytteistys epävarmuuden arviointiin

Kehitys

  • Testidata — miljoona arvoa, generoituna taustalla niin että sivu pysyy responsiivisena
  • Fixturet — siemenlukupohjaisia, joten epäonnistuva testi epäonnistuu samalla tavalla joka kerta
  • Satunnaiset ID:t — täytöllä, etuliitteillä tai mallineella
  • Kuormitustestaus — mallinnetut tunnisteet kuten user{n}@example.com

Aidosti satunnaiset vs. näennäissatunnaiset luvut

Math.random()crypto.getRandomValues()Siemenluku (xoshiro128**)
TyyppiNäennäissatunnainenKryptografisesti turvallinenNäennäissatunnainen, deterministinen
Entropian lähdeMoottorin valitsema siemenJärjestelmän CSPRNGOma siementekstisi
Ennustettavissa?MahdollisestiEiKyllä, tarkoituksella
Toistettavissa?EiEiAina
Sopii turvallisuuteenEiKylläEi
Sopii tilastoihinRiippuuKylläKyllä
Sopii todennettaviin arvontoihinEiEiKyllä

Math.random()-funktiota ei käytetä tässä työkalussa missään.

Arvonnat ilman toistoja

Kun Ei toistoja on käytössä, jokainen alueen luku esiintyy korkeintaan kerran. Ihanteellinen:

  • Arvontoihin — kukaan ei voi voittaa kahdesti
  • Permutaatioihin — kohteiden sekoittamiseen
  • Bingoon — numeroiden kutsumiseen niin, että kutsuttu pysyy kutsuttuna
  • Lottoon — kuusi eri numeroa alueelta 1–49

Arvonta käyttää osittaista Fisher–Yates-sekoitusta, joten kuuden luvun pyytäminen miljoonasta on yhtä nopeaa kuin kuuden luvun pyytäminen 49:stä — se ei koskaan silmukoi toivoen välttävänsä törmäyksen. Jos pyydät enemmän uniikkeja lukuja kuin alue voi tarjota, generaattori kertoo sen sinulle sen sijaan että jäisi jumiin.

Tulosten vienti

Kopioi luvut pelkkänä tekstinä millä tahansa erottimella, CSV-muodossa taulukkolaskentaan, JSON-muodossa koodiin tai Markdown-taulukkona dokumentaatioon. Hyvin suuret arvonnat pysyvät kokonaan muistissa ja kopioituvat kokonaan, vaikka näytölle piirretään vain pari ensimmäistä tuhatta.

Satunnaislukujen generointi omassa koodissa

JavaScript / TypeScript

// Cryptographically secure integer in [min, max], without modulo bias.
// The naive `value % range` favours low numbers when range does not
// divide 2**32 evenly - so we reject values in the uneven tail.
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

# Cryptographically secure, no modulo bias
n = secrets.randbelow(max - min + 1) + min

# Reproducible: the same seed always gives the same sequence
rng = random.Random('my-seed')
n = rng.randint(min, max)

# Without repetition
sample = random.sample(range(min, max + 1), count)

PHP

// Cryptographically secure (PHP 7+), no modulo bias
$n = random_int($min, $max);

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

Usein kysytyt kysymykset (FAQ)

Ovatko tulokset todella satunnaisia? Turvallisessa tilassa kyllä. Se perustuu funktioon crypto.getRandomValues(), kryptografisesti turvalliseen generaattoriin, jota ruokkii käyttöjärjestelmäsi entropiapooli. Tulokset ovat tasaisesti jakautuneita ja ennustamattomia. Siemenlukutila on tarkoituksella päinvastainen: se on toistettava, ja juuri se on sen tarkoitus.
Kuinka monta lukua voin generoida kerralla? Enintään 1 000 000. Yli 50 000 luvun arvonnat lasketaan taustatyössä (worker), jotta sivu pysyy responsiivisena, ja näytöllä näkyy ensimmäiset 2 000 sekä lopun määrä — kopioiminen antaa silti kaiken.
Voinko generoida negatiivisia lukuja? Kyllä. Aseta minimi negatiiviseksi. Koko JavaScriptin lukualue toimii, myös negatiiviset arvot molemmissa päissä.
Vaikuttaako lajittelu satunnaisuuteen? Ei. Luvut arvotaan ensin ja lajitellaan vasta sen jälkeen. Lajittelu muuttaa vain sitä järjestystä, jossa ne näet.
Antaako sama siemen samat luvut huomennakin? Kyllä, ja millä tahansa muulla laitteella tai selaimella. Siemenlukugeneraattori on täysin deterministinen ja riippuu vain siemenestäsi ja asetuksistasi.
Mitä tasajakaumatesti kertoo minulle? Se ajaa khiin neliö -testin, joka vertaa kunkin luvun todellista esiintymistiheyttä siihen, mitä sen pitäisi olla. Jos testisuure pysyy kriittisen arvon alapuolella, tulokset ovat yhteensopivia tasajakauman kanssa. Se vaatii kohtuullisen kapean alueen ja riittävästi arvontoja — vähintään viisi per mahdollinen arvo — jotta tuloksella olisi merkitystä.
Miten painot toimivat? Kirjoita ne muodossa luku:paino, esimerkiksi 1:5, 2:1, 3:1. Tässä luku 1 on viisi kertaa todennäköisempi kuin 2 tai 3. Luvut, joita et luettele, saavat painon nolla eikä niitä koskaan arvota.
Mitä noppanotaatiota tuetaan? 3d6 heittää kolme kuusitahoista noppaa. Lisää muunnin merkinnällä 3d6+2. Pidä tai pudota noppia merkinnöillä kh, kl, dh, dl — joten 2d20kh1 pitää kahdesta d20:sta korkeamman (etulyöntiasema) ja 4d6dl1 pudottaa neljästä d6:sta pienimmän.
Tallennetaanko historiani jonnekin? Vain tähän selaimeen, paikalliseen tallennustilaan (local storage). Se ei koskaan kulkeudu palvelimelle, ei synkronoidu toiselle laitteelle, ja katoaa jos tyhjennät sivuston tiedot. Vie se JSON-tiedostoon, jos haluat säilyttää tai siirtää sen.

Arvostaisin, jos voisit jakaa nämä sivut ystävien kanssa, tallentaa ne kirjanmerkkeihin tai linkittää niihin. Kiitos! 🙏