Discussione: funzione Random!
View Single Post
Old 23-05-2005, 15:30   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
Stavo lavoricchiando a un tutorial su questo argomento, e la tua domanda potrebbe essere lo stimolo giusto per concluderlo e pubblicarlo qui. Comunque, ecco qualcosa per cominciare:

In genere, le funzioni random dei linguaggi di programmazione sono generatori pseudocasuali che producono sequenze a partire da valori iniziali; si richiede che la sequenza non "abbia regolarita' apparenti" (qualunque cosa questo voglia dire).
Di solito, ogni valore viene calcolato a partire dal valore precedente mediante una congruenza lineare o un altro procedimento aritmetico.

La libreria standard del linguaggio C prevede una funzione rand, ogni chiamata alla quale restituisce un valore intero equidistribuito tra 0 e RAND_MAX inclusi, e una funzione srand che inizializza il seme del generatore con un valore a scelta.
E chiaro che l'unico modo per rendere imprevedibile un generatore siffatto consiste nello scegliere a caso il seme: questo viene fatto usando come argomento di srand il valore restituito da time, visto che il momento preciso in cui viene chiamata srand e' con buona approssimazione imprevediibile.

Java usa due sistemi: Math.Random restituisce un valore di tipo double, distribuito uniformemente (per quanto possibile) tra 0.0 incluso e 1.0 escluso; un'istanza dell'oggetto java.util.Random viene creato con un seme casuale e ha dei metodi per restituire l'elemento successivo della sequenza, in vari tipi.

I dettagli implementativi non vengono quasi mai descritti per intero, anche perche' possono dipendere dall'architettura hardware e dal sistema operativo.

Due libri che ne parlano approfonditamente sono il secondo volume di "The Art of Computer Programming" di Doland Knuth, e poi i vari "Algoritmi in <inserire un linguaggio a scelta>" di Robert Sedgewick.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso