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 nPrzykład z liczbami
Losowanie liczby od 1 do 3 ze źródła zwracającego 0, 1, 2 albo 3.
- naiwnie: 0→1, 1→2, 2→3, 3→1, więc 1 pojawia się dwa razy i dostaje 50% zamiast 33%
- poprawnie: limit = floor(4 / 3) × 3 = 3, więc wylosowanie 3 jest odrzucane i powtarzane
- 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.