2009-05-03 24 views

Respuesta

17

"utilizan la Fuente, Lucas!" ... ;-). Estudiar http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup lo tranquilizará rápidamente ;-).

Lo que ocurre cuando la semilla no está establecido (que es la "i es Ninguno" caso):

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

y la expovariate:

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

, obviamente, utiliza el mismo generador aleatorio subyacente como cada otro método, y por lo tanto se ve afectado de forma idéntica por la siembra o la falta de la misma (en realidad, ¿cómo otra cosa se habría hecho? -)

+0

el enlace está muerto :( –

6

a) Suele usar el reloj del sistema, el reloj en algunos sistemas solo puede tener más precisión, por lo que sembrar dos veces muy rápidamente puede dar como resultado el mismo valor.

seed (self, a = None) Inicializa el estado interno del objeto hashable.

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) Me gustaría imaginar expovariate hace, pero no puedo encontrar ninguna prueba. Sería tonto si no fuera así.

2

actual sistema de tiempo se utiliza; la hora actual del sistema también se usa para inicializar el generador cuando el módulo se importa por primera vez. Si el sistema operativo proporciona fuentes de aleatoriedad, se utilizan en lugar de la hora del sistema (consulte la función os.urandom() para obtener detalles sobre la disponibilidad).

Random Docs

Cuestiones relacionadas