Generatore di numeri casuali
Risultato
Numeri estratti
- Valori possibili
- 100
- Probabilità di almeno un numero ripetuto
- 9,65%
Un generatore di numeri casuali trasforma un punto di partenza in un elenco di numeri interi dentro un intervallo che scegli. Questo prende un intervallo, quanti numeri vuoi e il seme casuale da cui partire, e restituisce esattamente quella quantità di interi: gli stessi ogni volta che usi lo stesso seme, ed è ciò che rende un elenco consegnabile a qualcun altro perché lo riproduca. Disattiva i duplicati e il risultato diventa una selezione invece che una sequenza, quindi nessun valore può uscire due volte; lasciali attivi e i numeri sono estrazioni indipendenti, che è il modello onesto per un dado, un'urna del lotto o una playlist mescolata che può ripetersi. Il pannello riporta anche quanti valori diversi contiene l'intervallo e quanto sarebbe probabile una ripetizione se i duplicati fossero ammessi.
Formula
successivo = (stato + 0x6D2B79F5) mescolato con moltiplicazioni e scorrimenti → valore = minimo + ⌊successivo × (massimo − minimo + 1)⌋
- seme casuale
- Lo stato da cui il generatore parte, un numero intero qualsiasi da 0 a 4294967295. Non è una fonte di casualità di per sé: è il punto in cui la sequenza comincia, ed è esattamente per questo che lo stesso seme dà sempre lo stesso elenco
- stato
- Lo stato corrente, aggiornato una volta per ogni numero. L'aggiornamento mescola lo stato con una costante fissa e qualche passo di moltiplicazione e scorrimento; è il mescolamento a far sembrare scollegati i valori consecutivi, ed è il passo che cederebbe per primo se venisse semplificato
- minimo, massimo
- Gli estremi dell'intervallo, entrambi inclusi. È l'ampiezza dell'intervallo a fare da fattore di scala alla frazione, quindi ogni numero intero dell'intervallo ha la stessa probabilità
- ⌊ ⌋
- Arrotondamento verso il basso. Il generatore produce una frazione in [0, 1) e la parte intera inferiore la trasforma in uno degli interi dell'intervallo
- quantità
- Quanti numeri produrre, fino a 200. Con i duplicati disattivati non può superare l'ampiezza dell'intervallo, perché una selezione non può essere più lunga dell'insieme da cui proviene
Usalo quando ti serve un elenco invece di un singolo numero: un campione da controllare a mano, un insieme di casi di prova che deve essere identico a ogni esecuzione, un'estrazione che vuoi poter ripetere davanti a un pubblico, o dati segnaposto. La possibilità di fissare il seme è la ragione per preferirlo alla funzione casuale che il tuo linguaggio offre di serie: un seme trasforma un risultato irripetibile in qualcosa che puoi condividere, ricontrollare e discutere. Ricorri ai duplicati disattivati quando lo stesso elemento non deve comparire due volte, che è la forma di un'estrazione al lotto, di un campione casuale da un elenco e di un ordine mescolato. Due cose per cui non serve: non è una fonte di numeri imprevedibili, quindi nulla che debba essere indovinabile a fatica ha posto qui; e non sostituisce un campione casuale statistico di una popolazione reale, perché non sa nulla della popolazione, solo dell'intervallo.
Esempi svolti
Cinque numeri da 1 a 100, e gli stessi cinque di nuovo
- L'intervallo da 1 a 100 contiene 100 valori diversi, quindi ogni estrazione è una fra 100
- Il seme 1 fissa lo stato di partenza; ognuno dei cinque numeri lo aggiorna una volta
- Arrotondando verso il basso ogni frazione dentro 1–100 si ottiene 63, 1, 53, 99 e 97 in quest'ordine
Quei cinque numeri non sono una coincidenza né una tabella memorizzata: sono quello che il seme 1 produce, e digitando di nuovo 1 nel campo del seme si riproducono esattamente. Nota che il 9,65% è un'affermazione sull'intervallo e sulla quantità, non su questa particolare estrazione: con cinque estrazioni da cento valori c'è poco meno di una probabilità su dieci che due di esse coincidano, che due di questi numeri coincidano oppure no. Cambiando il seme a 7 si ottiene un elenco del tutto diverso lasciando quella percentuale intatta, ed è il modo più chiaro di vedere quale parte del pannello è casuale e quale è aritmetica.
Sei numeri da 1 a 49 con le ripetizioni vietate
- L'insieme è di 49 valori e se ne estraggono sei senza reimmissione
- Ogni nuovo numero viene riestratto finché non è uno che l'insieme non ha già dato, ed è per questo che un valore non può mai comparire due volte
- Leggendo l'elenco nell'ordine in cui è stato prodotto si ottiene 23, 16, 33, 31, 8 e 11
Disattivare i duplicati non cambia il 27,26%, ed è proprio il senso di riportarlo accanto a questo esempio: è la probabilità che sei estrazioni da 49 si sarebbero scontrate se le ripetizioni fossero state ammesse, ed è la stessa che tu le abbia vietate o no. È anche ciò che rende costosa un'estrazione senza ripetizioni con quantità grandi: a 49 valori e 6 estrazioni, più di un quarto delle estrazioni libere ripeterebbe qualcosa, e con 23 estrazioni da 365 la cifra supera la metà. I numeri restano nell'ordine in cui sono stati estratti invece di essere ordinati, così che lo stesso seme e le stesse impostazioni riproducano sempre lo stesso elenco.
Un intervallo con un solo valore dentro
- L'intervallo contiene esattamente un valore, quindi ogni estrazione è quel valore
- La probabilità di ripetizione è la probabilità che quattro estrazioni si scontrino, e con un insieme di uno devono per forza
- Il risultato è 7, 7, 7 e 7
Questo è il confine in cui il generatore di numeri casuali smette di essere casuale e diventa una costante, e vale la pena tenerlo presente perché è l'unico caso in cui l'output è del tutto prevedibile prima di premere qualsiasi cosa. Segna anche il limite della modalità senza ripetizioni: con lo stesso intervallo, chiedere due numeri senza duplicati è una richiesta impossibile e non un elenco più corto, e la pagina lo dice invece di restituire in silenzio un solo numero.
Limiti
Questi numeri non sono adatti a nulla che debba essere impossibile da indovinare. Il generatore è una piccola e veloce successione aritmetica seminata, del tipo incorporato nel software comune: dato il seme, chiunque può riprodurre l'intero elenco, e dati alcuni valori che ne provengono, il resto si può ricavare. Questo lo esclude per password, chiavi, token, codici monouso, lotterie con denaro in palio e qualsiasi altra cosa in cui un partecipante non debba poter prevedere o ricostruire l'estrazione. Per quelle serve una fonte casuale crittografica, che è l'unica risposta corretta. La probabilità di ripetizione non è inoltre un'affermazione sull'elenco che stai guardando: è la probabilità che un'estrazione di quella dimensione da quell'insieme contenga almeno una collisione, calcolata come se le estrazioni fossero indipendenti e uniformi, ed è riportata che i duplicati siano stati ammessi o no. Il suo significato pratico è quello che coglie la gente alla sprovvista: a una collisione basta circa la radice quadrata dell'ampiezza dell'insieme per diventare probabile, quindi 23 estrazioni da 365 date superano già la probabilità del 50%. E la quantità è limitata a 200 per esecuzione, con l'impossibilità di evitare le ripetizioni una volta che la quantità supera l'insieme.
Domande frequenti
- Questi numeri sono sicuri per una lotteria, una password o un token di sicurezza?
- No. Questo generatore è una piccola successione aritmetica seminata, del tipo che usa il software comune, non una crittografica: dal seme si può riprodurre l'intero elenco, e da alcuni dei suoi valori si può ricavare il resto. Tutto ciò in cui un partecipante non debba poter prevedere o ricostruire il risultato — lotterie con denaro in palio, password, chiavi, token, codici monouso — ha bisogno invece di una fonte casuale crittografica. Per estrazioni, campioni, giochi e dati di prova, dove la riproducibilità è una qualità e non una fuga di informazioni, è lo strumento giusto.
- A che cosa serve il seme, e perché ottengo sempre gli stessi numeri?
- Il seme è lo stato da cui la sequenza parte, quindi lo stesso seme produce sempre lo stesso elenco. È voluto: rende il risultato riproducibile, che è ciò che serve quando devi consegnare un campione a qualcun altro, ripetere un'estrazione davanti a un pubblico o impedire a un caso di prova di cambiare. Cambia il seme e ottieni un elenco diverso con le stesse impostazioni. Se vuoi che i numeri siano diversi ogni volta, cambia il seme fra un'esecuzione e l'altra: il valore che digiti resta registrato insieme al risultato, quindi un elenco che ti è piaciuto si può sempre recuperare.
- Perché i duplicati possono ancora comparire quando sono ammessi?
- Perché ogni estrazione è indipendente. Con i duplicati ammessi, ogni posizione sceglie uno dei valori dell'intervallo senza guardare cosa hanno scelto le altre, che è il modello onesto per il lancio di un dado o per un'urna del lotto che rimette dentro la pallina. La probabilità di ripetizione sul pannello è esattamente la probabilità che almeno una coppia coincida — circa 9,65% per cinque estrazioni da cento valori, e oltre il 50% quando estrai 23 valori da 365. Disattiva i duplicati quando lo stesso valore non deve comparire due volte, che è la forma di una riffa, di un campione da un elenco o di un ordine mescolato.
- La probabilità di ripetizione diminuisce se vieto i duplicati?
- No, e il pannello continua a mostrare lo stesso numero di proposito. Risponde alla domanda che ti stai effettivamente ponendo quando sposti quell'interruttore: quanto sarebbe stata probabile una collisione se le ripetizioni fossero state permesse. Per sei numeri da 1 a 49 è 27,26%, quindi vietare i duplicati elimina un rischio reale e non teorico. Spiega anche perché un'estrazione senza ripetizioni diventa lenta e alla fine impossibile con quantità grandi: quando la quantità supera il numero di valori dell'intervallo non esiste alcuna risposta valida, e la pagina lo segnala invece di restituire un elenco più corto.
- Quanti numeri posso generare in una volta, e su quale intervallo?
- Fino a 200 numeri per esecuzione, e gli estremi dell'intervallo devono essere numeri interi con il minimo non maggiore del massimo. I valori in sé possono essere negativi, quindi un intervallo da −50 a 50 va bene. Gli estremi non interi vengono rifiutati invece che arrotondati: con i duplicati vietati, estrarre da un intervallo che contiene frazioni renderebbe la regola di non ripetizione una condizione vuota, e un elenco dall'aria plausibile che ignora in silenzio la propria impostazione è peggio di un messaggio di errore.
- I numeri sono ordinati?
- No: sono stampati nell'ordine in cui sono stati estratti, e quell'ordine fa parte del risultato. Ordinare butterebbe via l'informazione che lo stesso seme deve poter riprodurre, e conta per tutto ciò in cui la posizione ha significato, come assegnare un ordine mescolato o distribuire una mano. Se vuoi una selezione ordinata, ordina tu l'elenco dopo averlo copiato; l'estrazione in sé resta fedele alla sequenza che il seme ha prodotto.
Riferimenti
- SP 800-90A Rev. 1, Recommendation for Random Number Generation Using Deterministic Random Bit Generators — National Institute of Standards and Technology (NIST), Computer Security Resource Center
- Math.random() — JavaScript reference (a built-in generator with no seed parameter, and the explicit warning that it is not cryptographically secure) — MDN Web Docs, Mozilla
- Birthday Problem — from Wolfram MathWorld (the probability that a group drawn from a pool contains a repeated value, 1 − the falling-factorial product over the pool size) — Wolfram MathWorld