Generator liczb losowych

Acrafto Team Matematyka
Zaktualizowano
Szybkie ustawienia
Wszystko działa w Twojej przeglądarce. Żadna liczba nigdy nie opuszcza Twojego urządzenia.

Jak działa generator liczb losowych?

Generator daje Ci dwa źródła losowości, a Ty wybierasz, które pasuje do zadania.

Bezpieczne losowanie czerpie entropię z Twojego systemu operacyjnego przez Web Crypto API (crypto.getRandomValues()). Jest nieprzewidywalne i niepowtarzalne — właściwy wybór dla prawdziwego losowania, w którym nikt nie powinien być w stanie z góry odgadnąć wyniku.

Z ziarnem (seeded) zamienia dowolny wpisany tekst w stan początkowy generatora deterministycznego (xoshiro128**). To samo ziarno zawsze daje te same liczby, więc każdy może powtórzyć Twoje losowanie i potwierdzić, że wynik zgadza się z tym, co deklarujesz.

Oba tryby działają wyłącznie w Twojej przeglądarce. Żadna liczba nigdy nie trafia na serwer.

Bez błędu modulo

Większość prostych generatorów mapuje losową wartość 32-bitową na zadany zakres za pomocą value % range. Gdy zakres nie dzieli się równo przez 2³², najniższe liczby pojawiają się nieco częściej niż pozostałe. Przy tysiącach losowań staje się to mierzalne.

Ten generator używa zamiast tego próbkowania odrzucającego (rejection sampling): wartości, które wpadłyby w nierówny „ogon”, są odrzucane i losowane ponownie. Każda liczba w Twoim zakresie ma dokładnie taką samą szansę. Możesz to sam zweryfikować wbudowanym testem jednorodności.

Co potrafi generator

Zakres

  • Minimum i maksimum — dowolny zakres całkowity lub dziesiętny, w tym wartości ujemne
  • Ile liczb — od 1 do 1 000 000 w jednym losowaniu
  • Bez powtórzeń — każda liczba pojawia się co najwyżej raz, tak jak w prawdziwym losowaniu
  • Sortowanie — kolejność losowania, rosnąco lub malejąco; sortowanie nigdy nie wpływa na losowość
  • Krok — ogranicz wyniki do wielokrotności podanej wartości, tak by pojawiały się tylko np. 0, 5, 10, 15
  • Wykluczone liczby — lista wartości, które nigdy nie mogą zostać wylosowane

Tryb

  • Źródło losowości — bezpieczne (Web Crypto) lub z ziarnem (powtarzalne)
  • Ziarno — dowolny tekst; to samo ziarno zawsze odtwarza to samo losowanie
  • Rozkład — jednostajny, normalny (Gaussa), wykładniczy, Poissona, trójkątny, dwumianowy
  • Wagi — nadaj wybranym liczbom większą szansę, zapisane jako number:weight
  • Notacja kości — 3d6+2, d20, 2d20kh1 dla przewagi, 4d6dl1 do losowania statystyk postaci

Wyjście

  • Separator — przecinek, spacja, średnik, tabulator, nowa linia lub dowolny wpisany znak
  • System liczbowy — dziesiętny, binarny, ósemkowy, szesnastkowy lub podstawa 36
  • Wypełnianie zerami — zamień 7 na 007 dla numerów biletów czy identyfikatorów
  • Prefiks i sufiks — otocz każdą liczbę stałym tekstem
  • Szablon — {n} to liczba, {i} jej pozycja, więc user{n} staje się user42
  • Kopiuj jako — zwykły tekst, CSV, JSON lub tabelę Markdown

Statystyki

Każde losowanie jest podsumowywane na żywo: suma, średnia, mediana, minimum, maksimum, odchylenie standardowe, a także ile wyników jest parzystych, nieparzystych lub pierwszych. Histogram pokazuje kształt rozkładu, a test chi-kwadrat mówi, czy wyniki faktycznie odpowiadają rozkładowi jednostajnemu.

Historia

Ostatnie 50 losowań jest zapisywanych w Twojej przeglądarce wraz z ustawieniami, które je wygenerowały — jedno kliknięcie przywraca dowolne z nich. Często używane konfiguracje można zapisać jako nazwane presety, a całość wyeksportować do pliku JSON i zaimportować na innym urządzeniu. Nic nie jest przechowywane nigdzie poza tą przeglądarką.

Klawiatura

Naciśnij Spację lub R, aby losować ponownie bez sięgania po myszkę.

Szybkie presety

PresetZakresIlośćZastosowanie
🎲 Kostka1–61Gry planszowe, podejmowanie decyzji
🪙 Moneta0–11Orzeł czy reszka
🎰 Loteria1–496Unikalne, posortowane, jak w prawdziwym losowaniu
💯 1–1001–1001Procenty, podziały A/B
🔢 PIN0–94Cztery cyfry, powtórzenia dozwolone

Powtarzalne losowania

Tryb z ziarnem istnieje na te chwile, gdy „zaufaj mi, to było losowe” to za mało.

Wybierz ziarno, na które wszyscy mogą się zgodzić z góry — datę, hashtag, cenę zamknięcia czegoś publicznie dostępnego — i ogłoś je przed losowaniem. Każdy może wtedy wpisać to samo ziarno z tymi samymi ustawieniami i otrzymać identyczny wynik. Nie udowodniłeś, że liczby były nieprzewidywalne — udowodniłeś, że nie losowałeś ponownie, aż spodobał Ci się wynik.

To także sposób na uczynienie losowości powtarzalną w pracy, którą trzeba dać się sprawdzić: plan próbkowania, który kolega może uruchomić ponownie, zestaw danych testowych, który pozostaje stabilny w całym pakiecie testów, ćwiczenie na zajęciach, w którym każdy uczeń dostaje te same „losowe” dane.

Wybór rozkładu

Jednostajny daje każdej liczbie w zakresie taką samą szansę. To zwykle rozumie się pod pojęciem „losowy” i jest to ustawienie domyślne.

Pozostałe skupiają wyniki wokół pewnej wartości, co odpowiada zachowaniu wielkości występujących w rzeczywistości:

  • Normalny (Gaussa) — wzrost, błędy pomiarowe, wyniki testów. Ustaw średnią i odchylenie standardowe.
  • Wykładniczy — czasy oczekiwania między niezależnymi zdarzeniami.
  • Poissona — liczba zdarzeń w ustalonym przedziale: przyjazdy na godzinę, wady na partię.
  • Trójkątny — gdy znasz minimum, maksimum i wartość najbardziej prawdopodobną, ale nic więcej. Częsty w szacunkach projektowych.
  • Dwumianowy — liczba sukcesów przy ustalonej liczbie prób i stałym prawdopodobieństwie.

Każdy rozkład jest przycinany do ustawionego zakresu, więc długi ogon rozkładu Gaussa nie może wyjść poza minimum i maksimum.

Gdzie stosuje się liczby losowe

Gry i rozrywka

  • Gry planszowe — rzuty kostką, kolejność tur
  • Gry RPG — 4d6dl1 do generowania cech postaci, 2d20kh1 dla przewagi
  • Losowania nagród — wybór zwycięzcy, z ziarnem, aby uczestnicy mogli to zweryfikować
  • Quizy — losowa kolejność pytań

Statystyka i nauka

  • Próbkowanie — losowanie próby z populacji bez powtórzeń
  • Testy A/B — przypisywanie uczestników do grup
  • Symulacja Monte Carlo — szacowanie prawdopodobieństwa przez wielokrotne powtarzanie
  • Bootstrapping — resampling do szacowania niepewności

Programowanie

  • Dane testowe — milion wartości generowanych w tle, tak by strona pozostawała responsywna
  • Fixtures — z ziarnem, dzięki czemu nieudany test zawodzi tak samo za każdym razem
  • Losowe identyfikatory — z wypełnieniem, prefiksami lub szablonem
  • Testy obciążeniowe — identyfikatory według szablonu, np. user{n}@example.com

Liczby prawdziwie losowe a pseudolosowe

Math.random()crypto.getRandomValues()Z ziarnem (xoshiro128**)
TypPseudolosoweKryptograficznie bezpiecznePseudolosowe, deterministyczne
Źródło entropiiZiarno wybrane przez silnikSystemowy CSPRNGTwój tekst-ziarno
Przewidywalne?PotencjalnieNieTak, celowo
Powtarzalne?NieNieZawsze
Dobre dla bezpieczeństwaNieTakNie
Dobre dla statystykiZależyTakTak
Dobre dla weryfikowalnych losowańNieNieTak

Math.random() nie jest nigdzie używany w tym narzędziu.

Losowania bez powtórzeń

Po włączeniu opcji Bez powtórzeń każda liczba w zakresie pojawia się co najwyżej raz. Idealne do:

  • Losowań nagród — nikt nie może wygrać dwukrotnie
  • Permutacji — przetasowania zbioru elementów
  • Bingo — losowania liczb, które pozostają wylosowane
  • Loterii — sześć różnych liczb z zakresu 1–49

Losowanie wykorzystuje częściowe tasowanie Fishera–Yatesa, więc wylosowanie 6 liczb z miliona jest tak samo szybkie jak wylosowanie 6 z 49 — nigdy nie zapętla się w nadziei uniknięcia kolizji. Jeśli poprosisz o więcej unikalnych liczb, niż dostarczyć może zakres, generator poinformuje o tym zamiast się zawiesić.

Eksport wyników

Skopiuj liczby jako zwykły tekst z dowolnym separatorem, jako CSV do arkusza kalkulacyjnego, jako JSON do kodu lub jako tabelę Markdown do dokumentacji. Bardzo duże losowania pozostają w pamięci w całości i kopiują się w całości, mimo że na ekranie losowany jest tylko pierwszy kilka tysięcy.

Generowanie liczb losowych we własnym kodzie

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);

Najczęściej zadawane pytania (FAQ)

Czy wynik jest naprawdę losowy? W trybie bezpiecznym — tak. Pochodzi z crypto.getRandomValues(), kryptograficznie bezpiecznego generatora zasilanego pulą entropii Twojego systemu operacyjnego. Wyniki są rozłożone jednostajnie i nieprzewidywalne. Tryb z ziarnem jest celowo przeciwieństwem: jest powtarzalny, i o to właśnie w nim chodzi.
Ile liczb mogę wygenerować jednocześnie? Do 1 000 000. Losowania powyżej 50 000 są obliczane w tle (background worker), dzięki czemu strona pozostaje responsywna, a na ekranie widać pierwsze 2000 wraz z liczbą pozostałych — kopiowanie i tak daje wszystko.
Czy mogę generować liczby ujemne? Tak. Ustaw minimum jako liczbę ujemną. Działa pełny zakres liczb JavaScript, w tym zakresy ujemne po obu stronach.
Czy sortowanie wpływa na losowość? Nie. Liczby są najpierw losowane, a dopiero potem sortowane. Sortowanie zmienia tylko kolejność, w jakiej je widzisz.
Czy to samo ziarno da te same liczby jutro? Tak, i to na dowolnym innym urządzeniu czy w innej przeglądarce. Generator z ziarnem jest w pełni deterministyczny i zależy wyłącznie od Twojego ziarna i ustawień.
Co mówi mi test jednorodności? Uruchamia test chi-kwadrat, porównując, jak często faktycznie pojawiała się każda liczba, z tym, jak często powinna się pojawiać. Jeśli statystyka pozostaje poniżej wartości krytycznej, wyniki są zgodne z rozkładem jednostajnym. Potrzebuje odpowiednio wąskiego zakresu i wystarczającej liczby losowań — co najmniej pięciu na każdą możliwą wartość — aby wynik był miarodajny.
Jak działają wagi? Zapisz je jako pary number:weight, na przykład 1:5, 2:1, 3:1. W tym przypadku 1 jest pięć razy bardziej prawdopodobna niż 2 lub 3. Liczby, których nie wymienisz, otrzymują wagę zero i nigdy nie zostaną wylosowane.
Jaka notacja kości jest obsługiwana? 3d6 rzuca trzema sześciennymi kośćmi. Dodaj modyfikator za pomocą 3d6+2. Zatrzymuj lub odrzucaj kości za pomocą kh, kl, dh, dl — więc 2d20kh1 zatrzymuje wyższy z dwóch rzutów d20 (przewaga), a 4d6dl1 odrzuca najniższy z czterech rzutów d6.
Czy moja historia jest gdzieś przechowywana? Tylko w tej przeglądarce, w local storage. Nigdy nie trafia na serwer, nie synchronizuje się z innym urządzeniem i znika po wyczyszczeniu danych witryny. Wyeksportuj ją do JSON, jeśli chcesz ją zachować lub przenieść.

Byłbym wdzięczny, gdybyś udostępnił te strony znajomym, dodał je do zakładek lub linkował do nich. Dziękuję! 🙏