https://dl.acm.org/doi/pdf/10.1145/272991.272995
Questo e' l'articolo dei tizi che lo hanno inventato, e spiega ESATTAMENTE il meccanismo di funzionamento.
Esistono un'infinita' di generatori di numeri casuali, adatti a diversi scopi:
NON ESISTE l'algoritmo “migliore”.
Il Mersenne Twister e' un algoritmo “general purpose” con proprieta' crittografice
https://en.wikipedia.org/wiki/Mersenne_Twister
Ma se ad uno non servono tali proprieta', ci sono infinite alternative, piu' efficienti.
Per trovare un'alternativa, per PRIMA cosa devi identificare le proprieta' che ti servono, solo DOPO puoi cercare l'algo che meglio soddisfa tali proprieta'.
https://en.wikipedia.org/wiki/Random_number_generation
Alcuni buoni testi introduttivi sull'argomento (sono della vecchia sQuola, uso i LIBRI :-) ):
- Random numbers and computers - Ronald T. Kneusel, Springer
- Random Number Generation and Monte Carlo Methods - James E. Gentle, Springer
- Random Number Generators: Principles and Practices - David Johnston, DeG Press
.
Altri link
https://support.nag.com/numeric/fl/nagdoc_fl23/xhtml/g05/g05intro.xml
Nota: un generatore di numeri PSEUDOcasuali funziona cosi':
- si parte da un numero iniziale (il “seed”) imposto dal programmatore, ad esempio 42, oppure 123, o la data di nascita oppure il timestamp corrente, e lo si usa come “numero random 0”
- si passa tale valore all'algoritmo che genera il “numero random 1”
- a questo punto si usa il “numero random 1” appena generato per generare il “numero random 2”,
- goto 3
.
Ovviamente l'implementazione non richiede che debba essere TU a ricordarti l'ultimo numero random generato, lo fa direttamente l'implementazione. Quindi, una volta “inizializzato” il generatore con il tuo “seed”, per avere il prossimo numero casuale tu semplicemente chiami la funzione preposta, funzione che non richede parametri!