Прямо семя Мерсена Твистера из CPython - PullRequest
2 голосов
/ 04 мая 2019

Базовым PRNG реализации CPython стандартного модуля random является Mersenne Twister, реализованный в Modules/_randommodule.c. При чтении исходного кода кажется, что вызов random.seed сначала вызовет init_by_array, определенный в том исходном файле, который, в свою очередь, вызывает init_genrand. Мне было интересно, есть ли какой-нибудь способ обойти вызов init_by_array и, из кода Python, напрямую вызвать init_genrand с определенным начальным числом (или, альтернативно, с учетом заданного начального числа, создать объект Python, который можно передать random.seed такой, что init_genrand будет вызван с этим семенем).

Моя мотивация для этого заключается в том, что я хотел бы протестировать мою собственную реализацию Mersenne Twister, сравнив ее вывод с выводом random.getrandbits после предоставления определенного начального числа.

...