PDA

View Full Version : funzione Random!


fremyd
23-05-2005, 13:01
Ciao a tutti, :help:
avrei bisogno di sapere come è implementata la funzione Random ( e la randomize) nei diversi linguaggi di programmazione..(in particolare in Java)
I concetti generici li conosco e ho anke visto le classi java.util.Random e Math.random() di Java, ma mi servirebbe una spiegazione abbastanza dettagliata (una bella spiegazione "a parole"... tipo i parametri da cui dipende il seme di generazione, un carrellata sull' algoritmo di implementazione, ecc..
Magari anke senza entrare troppo nei dettagli.. :help:
:rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Ziosilvio
23-05-2005, 15:30
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.