Skip to main content

Losowania pochodzą z kryptograficznego źródła losowości przeglądarki, a nie z Math.random, więc każdy wynik jest tak samo prawdopodobny.

1

Dlaczego oczywisty sposób losowania liczby jest lekko błędny

Wzięcie dużej losowej wartości i sprowadzenie jej resztą z dzielenia to standardowa sztuczka i jest obciążona. Jeśli zakres nie dzieli źródła równo, część liczb dostaje jedną szansę więcej. To narzędzie odrzuca takie przypadki i losuje ponownie, więc każda liczba z zakresu jest naprawdę tak samo prawdopodobna.

Jak to działa

  • Losuje liczby z dowolnego zakresu, pojedynczo lub do pięćdziesięciu naraz.
  • Opcjonalnie losuje bez powtórzeń, co jest tym, czego potrzebujesz do loterii albo losowania nagród.
  • Używa crypto.getRandomValues() zamiast Math.random(), z odrzucaniem usuwającym obciążenie reszty z dzielenia.
naiwnie: wartość % zakres        → obciążone
poprawnie: limit = floor(MAX / zakres) × zakres
           losuj ponownie, dopóki wartość >= limit
           wynik = min + (wartość % zakres)

bez powtórzeń: przetasuj cały zakres i weź pierwsze n

Przykład z liczbami

Losowanie liczby od 1 do 3 ze źródła zwracającego 0, 1, 2 albo 3.

  1. naiwnie: 0→1, 1→2, 2→3, 3→1, więc 1 pojawia się dwa razy i dostaje 50% zamiast 33%
  2. poprawnie: limit = floor(4 / 3) × 3 = 3, więc wylosowanie 3 jest odrzucane i powtarzane
  3. pozostałe wyniki 0, 1, 2 odwzorowują się na 1, 2, 3 z prawdopodobieństwem 1/3 każdy

Przy małych zakresach i źródle 32-bitowym obciążenie jest znikome, ale realne, a jego usunięcie kosztuje bardzo rzadkie dodatkowe losowanie.

Jak czytać wynik

  • Losowanie bez powtórzeń tasuje cały zakres i bierze pierwsze n, co pozostaje równomierne. Wielokrotne losowanie i odrzucanie duplikatów działa coraz gorzej, gdy zakres się wyczerpuje.
  • Zakres obejmuje oba końce: od 1 do 100 może zwrócić 1 i może zwrócić 100.
  • Nic nie jest wysyłane. Losowanie odbywa się w przeglądarce, więc żaden serwer nie widzi liczb ani nie może na nie wpłynąć.

Częste pytania

Czy mogę tego użyć do losowania nagród?
Do nieformalnego tak — jest nieobciążone i nic nie opuszcza Twojego komputera. Przy losowaniach o skutkach prawnych lub finansowych użyj procedury zostawiającej możliwy do audytu ślad, bo losowanie w przeglądarce nie zostawia dowodu, co się wydarzyło.
Czy wylosowany tu zestaw liczb ma większą szansę wygranej?
Nie. Każda kombinacja ma tę samą szansę, niezależnie od sposobu wyboru. Losowy wybór sprawia jednak, że rzadziej dzielisz się kumulacją, bo ludzie skupiają się na datach urodzin i wzorach.