Генератор на случајни броеви

Acrafto Team Математика
Ажурирано
Брзи поставки
Сѐ работи во вашиот прелистувач. Ниту еден број не го напушта вашиот уред.

Како работи генераторот на случајни броеви?

Генераторот ви дава два извори на случајност, а вие избирате кој ви одговара за задачата.

Безбеден случаен режим ја црпи ентропијата од вашиот оперативен систем преку Web Crypto API (crypto.getRandomValues()). Тој е непредвидлив и неповторлив — вистинскиот избор за вистинско извлекување каде никој не смее однапред да го погоди резултатот.

Со семе (seeded) секој текст што ќе го внесете го претвора во почетна состојба за детерминистички генератор (xoshiro128**). Истото семе секогаш произведува исти броеви, така што секој може да го повтори вашето извлекување и да потврди дека сте добиле она што го тврдите.

И двата работат целосно во вашиот прелистувач. Ниту еден број никогаш не стигнува до сервер.

Без модуло-пристрасност (modulo bias)

Повеќето едноставни генератори мапираат случајна 32-битна вредност на вашиот опсег со value % range. Кога опсегот не се дели рамномерно во 2³², најниските броеви се појавуваат малку почесто од другите. Низ илјадници извлекувања тоа е мерливо.

Овој генератор наместо тоа користи отфрлачко земање примероци (rejection sampling): вредностите што ќе паднат во нерамномерниот „остаток“ се отфрлаат и се извлекуваат повторно. Секој број во вашиот опсег има точно иста шанса. Тоа можете сами да го проверите со вградениот тест за рамномерност.

Што може генераторот

Опсег

  • Минимум и максимум — кој било цел или децимален опсег, вклучувајќи негативни вредности
  • Колку броеви — од 1 до 1.000.000 во едно извлекување
  • Без повторувања — секој број се појавува најмногу еднаш, како кај вистинско извлекување
  • Сортирање — редослед на извлекување, растечки или опаѓачки; сортирањето никогаш не ја допира случајноста
  • Чекор — резултатите да се ограничат на множители на одредена вредност, така што излегуваат само 0, 5, 10, 15
  • Исклучување броеви — наведете вредности што никогаш не смеат да бидат извлечени

Режим

  • Извор на случајност — безбеден (Web Crypto) или со семе (репродуцибилен)
  • Семе — кој било текст; истото семе секогаш го повторува истото извлекување
  • Распределба — рамномерна, нормална (Гаусова), експоненцијална, Поасонова, триаголна, биномна
  • Тежини — на избрани броеви им се дава поголема шанса, запишани како number:weight
  • Нотација за коцки — 3d6+2, d20, 2d20kh1 за предност, 4d6dl1 за фрлање карактеристики

Излез

  • Разделувач — запирка, празно место, точка-запирка, таб, нов ред, или каков било текст што ќе внесете
  • Броен систем — децимален, бинарен, октален, хексадецимален или база 36
  • Пополнување со нули — претворете 7 во 007 за броеви на билети или ID
  • Префикс и суфикс — обвиткајте секој број во фиксен текст
  • Шаблон — {n} е бројот, {i} неговата позиција, така user{n} станува user42
  • Копирај како — обичен текст, CSV, JSON или Markdown-табела

Статистика

Секое извлекување добива резиме во живо: збир, средна вредност, медијана, најмала, најголема вредност, стандардна девијација, плус колку резултати се парни, непарни или прости броеви. Хистограм ја покажува формата на распределбата, а хи-квадрат тест покажува дали резултатите навистина одговараат на рамномерна распределба.

Историја

Последните 50 извлекувања се чуваат во вашиот прелистувач, заедно со поставките што ги произвеле — со едно кликнување можете да ги вратите. Поставките што често ги користите може да се зачуваат како именувани пресети, а целата листа се извезува во JSON-датотека што може да ја увезете на друг уред. Ништо не се чува никаде освен во овој прелистувач.

Тастатура

Притиснете Space или R за повторно извлекување без да го користите глушецот.

Брзи пресети

ПресетОпсегБројУпотреба
🎲 Коцка1–61Игри на табла, одлучување
🪙 Паричка0–11Глава или писмо
🎰 Лотарија1–496Единствени, сортирани, како вистинско извлекување
💯 1–1001–1001Проценти, A/B поделби
🔢 PIN0–94Четири цифри, повторувања дозволени

Репродуцибилни извлекувања

Режимот со семе постои за моментите кога „верувај ми, беше случајно“ не е доволно.

Изберете семе на кое сите однапред ќе се согласат — датум, хештаг, затворачка цена на нешто јавно — и објавете го пред извлекувањето. Секој потоа може да го внесе истото семе со истите поставки и да добие идентичен резултат. Со тоа не сте докажале дека броевите биле непредвидливи; сте докажале дека не сте повторувале сѐ додека не ви се допадне одговорот.

Ова е и начин да се направи случајноста повторлива во работа што мора да се провери: план за примероци што колега може повторно да го изврши, збир на тест-фикстури што останува стабилен низ тест-серија, часовна вежба каде секој ученик добива исти „случајни“ податоци.

Избор на распределба

Рамномерната дава на секој број во опсегот иста шанса. Тоа е она што луѓето обично го подразбираат под случајно, и е стандардна поставка.

Другите ги групираат резултатите околу одредена вредност, што е и она кон што реалните величини обично се стремат:

  • Нормална (Гаусова) — височини, грешки при мерење, резултати од тестови. Поставете средна вредност и стандардна девијација.
  • Експоненцијална — времиња на чекање помеѓу независни настани.
  • Поасонова — број на настани во фиксен интервал: пристигнувања на час, дефекти по серија.
  • Триаголна — кога го знаете минимумот, максимумот и најверојатната вредност, но ништо друго. Честа во проектни проценки.
  • Биномна — успеси од фиксен број обиди при фиксна веројатност.

Секоја распределба е ограничена на опсегот што сте го поставиле, така што долг Гаусов „опаш“ не може да излезе надвор од вашиот минимум и максимум.

Каде се користат случајните броеви

Игри и забава

  • Игри на табла — фрлање коцка, редослед на потези
  • Наративни (RPG) игри — 4d6dl1 за карактеристики на ликот, 2d20kh1 за предност
  • Наградни игри — избор на победник, со семе за да учесниците можат да го проверат
  • Квизови — случаен редослед на прашања

Статистика и наука

  • Земање примероци — извлекување примерок од популација без повторувања
  • A/B тестирање — доделување учесници на групи
  • Симулација Монте Карло — проценка на веројатност преку повторување
  • Bootstrapping — повторно земање примероци за проценка на неизвесност

Развој

  • Тест податоци — милион вредности, генерирани во позадина за страницата да остане одговорна
  • Фикстури — со семе, така што тест што не поминува секогаш „паѓа“ на ист начин
  • Случајни ID — со дополнување, префикси или шаблон
  • Тестирање на оптоварување — шаблонски идентификатори како user{n}@example.com

Вистински наспроти псевдослучајни броеви

Math.random()crypto.getRandomValues()Со семе (xoshiro128**)
ТипПсевдослучаенКриптографски безбеденПсевдослучаен, детерминистички
Извор на ентропијаСеме избрано од енџинотСистемски CSPRNGВашиот текст-семе
Предвидлив?ПотенцијалноНеДа, намерно
Повторлив?НеНеСекогаш
Погоден за безбедностНеДаНе
Погоден за статистикаЗависиДаДа
Погоден за проверливи извлекувањаНеНеДа

Math.random() не се користи никаде во овој алат.

Извлекувања без повторување

Со вклучена опција Без повторувања, секој број во опсегот се појавува најмногу еднаш. Идеално за:

  • Наградни игри — никој не може да победи двапати
  • Пермутации — размешување на збир на елементи
  • Бинго — повикување броеви што остануваат повикани
  • Лотарија — шест различни броеви од 1 до 49

Извлекувањето користи делумно Fisher–Yates размешување, така што бараните 6 броеви од милион е исто толку брзо колку и 6 од 49 — никогаш не се врти во циклус надевајќи се да избегне судир. Ако побарате повеќе единствени броеви отколку што опсегот може да понуди, генераторот тоа ќе го каже наместо да заглави.

Извоз на резултатите

Копирајте ги броевите како обичен текст со кој било разделувач, како CSV за табела, како JSON за код, или како Markdown-табела за документација. Многу големите извлекувања остануваат целосно во меморија и се копираат во целост, дури и кога на екранот се прикажани само првите неколку илјади.

Генерирање случајни броеви во сопствен код

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

Често поставувани прашања (ЧПП)

Дали резултатот е навистина случаен? Во безбедниот режим, да. Доаѓа од crypto.getRandomValues(), криптографски безбеден генератор напојуван од базенот на ентропија на вашиот оперативен систем. Резултатите се рамномерно распределени и непредвидливи. Режимот со семе е намерно спротивен: тој е репродуцибилен, што е и целта.
Колку броеви можам да генерирам одеднаш? До 1.000.000. Извлекувања над 50.000 се пресметуваат во позадински работник (worker) за страницата да остане одговорна, а на екранот се прикажуваат првите 2.000 со бројка за останатите — копирањето сепак дава сѐ.
Можам ли да генерирам негативни броеви? Да. Поставете негативен минимум. Работи целиот опсег на JavaScript броеви, вклучувајќи негативни опсези на двата краја.
Дали сортирањето влијае на случајноста? Не. Броевите прво се извлекуваат, а потоа се сортираат. Сортирањето го менува само редоследот во кој ги гледате.
Дали истото семе ќе даде исти броеви утре? Да, и на кој било друг уред или прелистувач. Генераторот со семе е целосно детерминистички и зависи само од вашето семе и поставки.
Што ми кажува тестот за рамномерност? Тој извршува хи-квадрат тест што го споредува тоа колку често секој број навистина се појавил со тоа колку често требало да се појави. Ако статистиката остане под критичната вредност, резултатите се во согласност со рамномерна распределба. Потребен е разумно тесен опсег и доволно извлекувања — најмалку пет по можна вредност — за да покаже нешто значајно.
Како функционираат тежините? Запишете ги како парови number:weight, на пример 1:5, 2:1, 3:1. Тука 1 е пет пати поверојатно од 2 или 3. Броевите што не ги наведете добиваат тежина нула и никогаш не се извлекуваат.
Која нотација за коцки е поддржана? 3d6 фрла три шестострани коцки. Додадете модификатор со 3d6+2. Задржете или отфрлете коцки со kh, kl, dh, dl — така 2d20kh1 ја задржува повисоката од две d20 коцки (предност), а 4d6dl1 ја отфрла најниската од четири d6 коцки.
Дали мојата историја се чува некаде? Само во овој прелистувач, во локалното складиште (local storage). Никогаш не стигнува до сервер, никогаш не се синхронизира со друг уред и исчезнува ако ги избришете податоците за оваа страница. Извезете ја во JSON ако сакате да ја зачувате или преместите.

Ќе бидам благодарен ако ги споделите овие страници со пријатели, ги зачувате во обележувачи или линкувате кон нив. Благодарам! 🙏