2009-05-03 18 views

risposta

17

"utilizzare la sorgente, Luke!" ... ;-). Studiare http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup ti rassicurerà rapidamente ;-).

Cosa accade quando seme non è impostato (che è la "i è nessun" caso):

if a is None: 
    try: 
     a = long(_hexlify(_urandom(16)), 16) 
    except NotImplementedError: 
     import time 
     a = long(time.time() * 256) # use fractional seconds 

e expovariate:

random = self.random 
u = random() 
while u <= 1e-7: 
    u = random() 
return -_log(u)/lambd 

utilizza ovviamente la stessa generatore casuale sottostante come ogni altro metodo, e così è identicamente influenzato dal seeding o dalla mancanza di esso (in realtà, in quale altro modo sarebbe stato fatto? -)

+0

il link è morto :( –

6

a) In genere utilizza l'orologio di sistema, l'orologio su alcuni sistemi può avere solo precisione MS e quindi effettuare il seed due volte molto rapidamente potrebbe dare lo stesso valore.

seme (auto, a = Nessuno) Inizializza stato interno da oggetto lavabile.

None or no argument seeds from current time or from an operating 
system specific randomness source if available. 

http://pydoc.org/2.5.1/random.html#Random-seed

b) immagino expovariate fa, ma non riesco a trovare alcuna prova. Sarebbe sciocco se non fosse così.

2

ora di sistema corrente; l'ora corrente del sistema viene anche utilizzata per inizializzare il generatore quando il modulo viene importato per la prima volta. Se le fonti di casualità sono fornite dal sistema operativo, vengono utilizzate al posto dell'ora di sistema (consultare la funzione os.urandom() per i dettagli sulla disponibilità).

Random Docs

Problemi correlati