a) В этом случае генератор случайных чисел использует системные часы (внесение изменений семян) в каждый прогон?
b) Используется ли семя для генерации псевдослучайных значений expovariate (лямбда)?
a) В этом случае генератор случайных чисел использует системные часы (внесение изменений семян) в каждый прогон?
b) Используется ли семя для генерации псевдослучайных значений expovariate (лямбда)?
"Используйте источник, Люк!"...;-). Изучение http://svn.python.org/view/python/trunk/Lib/random.py?revision=68378&view=markup быстро успокоит вас; -).
Что происходит, когда семя не установлено (что случай "i is None" ):
if a is None:
try:
a = long(_hexlify(_urandom(16)), 16)
except NotImplementedError:
import time
a = long(time.time() * 256) # use fractional seconds
и expovariate:
random = self.random
u = random()
while u <= 1e-7:
u = random()
return -_log(u)/lambd
очевидно, использует один и тот же базовый случайный генератор, как и любой другой метод, и поэтому одинаково влияет на посев или его отсутствие (действительно, как иначе это было бы сделано?)
a) Обычно он использует системные часы, часы на некоторых системах могут иметь только точность ms, поэтому семя дважды очень быстро может привести к тому же значению.
seed (self, a = None) Инициализировать внутреннее состояние из объекта hashable.
None or no argument seeds from current time or from an operating system specific randomness source if available.
b) Я бы предположил, что expovariate делает, но я не могу найти никаких доказательств. Было бы глупо, если бы не было.
используется текущее системное время; текущее системное время также используется для инициализации генератора, когда модуль сначала импортируется. Если источники случайности предоставляются операционной системой, они используются вместо системного времени (см. Функцию os.urandom() для получения подробной информации о доступности).