Базовым 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
после предоставления определенного начального числа.