Numpy: рдирдП PRNG BitGenerator рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдордИ 2019  ┬╖  166рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

13163 рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд░рд┐рдкреНрд▓реЗ рдореЗрдВ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ PRNG рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рд▓рд╛рдПрдЧрд╛ред рдЙрд╕ рдкреАрдЖрд░ рдкреНрд░рдмрдВрдзрдиреАрдп рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд╣рд┐рдд рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рд╕рднреА рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ BitGenerator рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдореЗрдВ рдирдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирд┐рд░реНрдгрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрд╛рд░ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реИрдВред

рджреВрд╕рд░реА рдУрд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдХрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИред рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ BitGenerator рдореЗрдВ numpy.random.* рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдирдИрдкреА 19 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпреЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ RandomState , рдЬрд┐рдирдХреА BitGenerator MT19937 ред рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрддрд╛ рд╣реИ, рдЬрдм Generator() рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╛рдиреА рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдордирдорд╛рдирд╛ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде Generator рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдкрд░ .seed() рдкрджреНрдзрддрд┐ рдХрд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ BitGenerator рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рддреБрд░рдВрдд рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╡реИрдз рд╡рд┐рдХрд▓реНрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ BitGenerator рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реЛрдВрдЧреА, рдЬрд┐рдирдХреЗ рд▓рд┐рдП BitGenerator рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрдмрдХрд┐ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛рдУрдВ рдХреЛ рдХрд╛рдлреА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдХрд┐рд╕реА рдХреЛ рднреА рдЬрдЧрд╣ рдХрд╛ рдЧреМрд░рд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рд╡рд╣ рд╕рдВрднрд╡рддрдГ рдкреБрд╕реНрддрдХреЛрдВ, рдмреНрд▓реЙрдЧреЛрдВ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред , рдФрд░ рдРрд╕рд╛ред

IMO, рдХреБрдЫ рдореБрдЦреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде, рдХреГрдкрдпрд╛ рдЕрд╕рд╣рдордд рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ; рдореИрдВрдиреЗ # 13163 рд╕реЗ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ

рд╣рдореЗрд╢рд╛ Generator(ChosenBitGenerator(maybe_seed)) рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдирдлреНрд░реЗрдВрдбрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд░рд┐рдкреНрд░реЛрдбреНрдпреВрд╕рдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдареАрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЛрдЧ рдЗрд╕ рд░рд╛рд╕реНрддреЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛред

MT19937

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрджрддрд░ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░рд╕реЗрди рдЯреНрд╡рд┐рд╕реНрдЯрд░ рдХреЛ рдЕрднреА рднреА "рдорд╛рдирдХ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЙрди рд╢реИрдХреНрд╖рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ PRNG рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ "рдЧреИрд░-рдорд╛рдирдХ" рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдкрддреНрд░реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред "рдЖрдИрдмреАрдПрдо рдХреЛ рдХрд╛рдо рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рдХрд┐рд╕реА рдХреЛ рдирд┐рдХрд╛рд▓ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ред" MT19937 рдХреА рдореБрдЦреНрдп рдЧрд┐рд░рд╛рд╡рдЯ рдЬреНрдпрд╛рджрд╛рддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИ, рдЗрд╕рдХреА рдмрд╣реБрдд рдмрдбрд╝реА рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, рдФрд░ рдпрд╣ рдХреБрдЫ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рддреА рд╣реИред рдПрдХ рдФрд░ PRNG рдЪреБрдирдиреЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ _opportunity_ рд╣реИ (рд▓реЗрдХрд┐рди _obligation_, IMO рдирд╣реАрдВ рд╣реИ) рдпрд╣рд╛рдВ рдкрд░ рд░рд╛рдп рд░рдЦрдиреЗ рдФрд░ рдЕрдЧрд░ рд╣рдо рдЪрд╛рд╣реЗрдВ рддреЛ "рдорд╛рдирдХ" рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

PCG64

рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдореБрдЦреНрдп рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реА рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреЛ рдореБрдЦреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, 32-рдмрд┐рдЯ CPUs рдФрд░ 64-рдмрд┐рдЯ MSVC рд╣реИрдВ, рдЬреЛ CPU рдХреЗ рд╣реЛрдиреЗ рдкрд░ рднреА 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореИрдВ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗрддрд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛-рдЪрдврд╝рд╛рдХрд░ рдмрддрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 32-рдмрд┐рдЯ рд╕реАрдкреАрдпреВ рд╣рдорд╛рд░реА рдкрд╕рдВрдж рддрдп рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди MSVC рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рдВрдбреЛрдЬ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдФрд░ рдЕрдиреНрдп Windows рд╕рдВрдХрд▓рдХ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рд╢рд╛рдпрдж рдХреБрдЫ рдЕрд╕реЗрдВрдмрд▓реА / рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ _only_ MSVC рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдиреНрдп рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реЛрддрд╛ рд╣реИред

Xoshiro256

рдПрдХ рдЫреЛрдЯреЗ, рддреЗрдЬ PRNG рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд▓реНрдкред рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЬреНрдЮрд╛рдд рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдХреНрд╡рд┐рд░реНрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рдХрд╛рд░рдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЙрди рд╡рд┐рдЪрд┐рддреНрд░рддрд╛рдУрдВ рдиреЗ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рджреВрд░ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╕рдВрдж рд╣реИ рдЬреЛ рдореИрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред

15 - Discussion numpy.random

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рд╕реВрддреНрд░ рд╕реЗ рдмрд╣реБрдд рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореБрдЭреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдЪрд╛рд░ ...

рдкреГрд╖реНрдарднреВрдорд┐

рдХрдИ рдЙрдкрд╛рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ pcg64 рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╛рдпреЛрдВ рдХреЗ рддрд╣рдд, рдЗрд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рд╕рд╛рдл рдмрд┐рд▓ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░реЗрдХреНрдЯреИрдВрдб рдХреЗ рд╕рд╛рде рдЖрдзреА рдкреЗрдЯреАрдмрд╛рдЗрдЯ рдкрд░ рдЪрд▓рд╛ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдХреГрддрд┐ рдореЗрд░реЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмреИрдарддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ " рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдордд рдкрдХрдбрд╝реЛ ", рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп PRNG рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдордЬрдмреВрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдмреЗрд╣рддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ...

рдЗрд╕рд▓рд┐рдП, рд▓рдЧрднрдЧ 25 рджрд┐рди рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдкреАрд╕реАрдЬреА рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдПрдХ рдирдП рд╕рджрд╕реНрдп рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ ...

рд▓рдХреНрд╖реНрдп

рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдирдП рдкреАрд╕реАрдЬреА рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдерд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди pcg64 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдПрдХ рдмреВрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдХреА:

  • рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ XSL рдЖрд░рдЖрд░ рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреЛ рд╣рд╛рдерд╛рдкрд╛рдИ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛)ред
  • рдкреНрд░рджрд░реНрд╢рди рдореМрдЬреВрджрд╛ pcg64 рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ (рдпрд╛ рддреЗрдЬрд╝) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдбрд┐рдЬрд╛рдЗрди PCG-ish рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА, рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдп рдХреЗ _any_ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ)ред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рднрд╛рд░реА рд╕реНрдХреНрд░реИрдореНрдмрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрджрдо рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреАрд╕реАрдЬреА рдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG "рд▓рдЧрднрдЧ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рдерд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдХрд╛рдлреА рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо 1 рд╕реЗ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рддрд░рд╣ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

рд╕реНрдкреЙрдЗрд▓рд░

рдореБрдЭреЗ рд╕рдлрд▓рддрд╛ рдХреА рд╕реВрдЪрдирд╛ рдорд┐рд▓реА рд╣реИ! рд▓рдЧрднрдЧ 25 рджрд┐рди рдкрд╣рд▓реЗ рдЬрдм рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рдерд╛ред рдЬрдм рдореИрдВ рд▓рдЧрднрдЧ рджрд╕ рджрд┐рди рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рдЖрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рд╡реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╛рдж рдХреЗ рд╕рдордп рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд▓ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрддреБрд╖реНрдЯ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд╕реА ++ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдзрдХреЗрд▓ рджрд┐рдпрд╛ ред рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдпрд╣ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ XSL RR рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ RXS M рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреНрдп рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рд╡рд░рдг

FWIW, рдирдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди (64-рдмрд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╕ рдХреЗ рд▓рд┐рдП) рд╣реИ:

uint64_t output(__uint128_t internal)
{
    uint64_t hi = internal >> 64;
    uint64_t lo = internal;

    lo |= 1;
    hi ^= hi >> 32;
    hi *= 0xda942042e4dd58b5ULL;
    hi ^= hi >> 48;
    hi *= lo;
    return hi;
}

рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди xorshift-рдЧреБрдгрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░реЛрдВ рдХреА рдкрд╕рдВрдж (рдП) рдЬрд╛рджреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ (рдмреА) рдХреНрд░рдордЪрдп рдХреЛ рдкреВрд░реНрд╡рд╡рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо-рдСрд░реНрдбрд░ рдмрд┐рдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ), рдФрд░ рдкреВрд░реЗ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ" рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВ PCG рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ "рдЧреБрдгрд╡рддреНрддрд╛" рд╣реА рд╣реЛрддреА рд╣реИред

рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди

рдпрд╣ рднреА рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ PRNG рдХреЗ рд▓рд┐рдП 0xda942042e4dd58b5 LCG рдЧреБрдгрдХ рд╣реИ (рдФрд░ рд╕рднреА cm_ рдЙрдкрд╕рд░реНрдЧ 128-рдмрд┐рдЯ PCG рдЬрдирд░реЗрдЯрд░)ред рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 0x2360ed051fc65da44385df649fccf645 рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ pcg64 , рдЗрд╕ рдирд┐рд░рдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рднреА рд╡рд░реНрдгрдХреНрд░рдореАрдп рдкрд░реАрдХреНрд╖рдг рдЧреБрдгреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреНрд╡рд╛рд░рд╛ рдХреНрдпреЛрдВрдХрд┐ 128 рдмрд┐рдЯ ├Ч 64-рдмрд┐рдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╕реНрддрд╛ рд╣реИ 128-рдмрд┐рдЯ ├Ч 128-рдмрд┐рдЯред рдореИрдВрдиреЗ рдЗрд╕ LCG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╕реНрддреЗ-рдЧреБрдгрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдкреВрд░реНрд╡-рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░рд╛рдЬреНрдп рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рдЕрдиреБрджреЗрд╢-рд╕реНрддрд░реАрдп рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рджред

рдкрд░рд┐рдХреНрд╖рдг

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдФрд░ рдЯреЗрд╕реНрдЯрдпреВ 01) рдФрд░ рдореИрдВ рдЗрд╕рд╕реЗ рдЦреБрд╢ рд╣реВрдВред рдЯреЗрд╕реНрдЯ рдореЗрдВ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╢рд╛рдорд┐рд▓ рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрдВрдЧ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдпрд╛ рддреЛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реНрдЯреАрдо рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рдпрд╛ 2 ^ 64 рддрдХ рдЙрдиреНрдирдд рдФрд░ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрдВрдЯрд░рд▓рд╛рдХрд┐рдВрдЧ рдХрд░рдирд╛ - рдореИрдВрдиреЗ рдЪрд╛рд░ рдХреЗ рдПрдХ рдЧреИрдВрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ 8192 рдореЗрдВ рд╕реЗ 8 рдЯреАрдмреА рдХреЗ рдЧреИрдВрдЧ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдзрд╛рд░рд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рднреВрдорд┐ рд╕рдордХрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ)ред

рд╕реНрдкреАрдб

рдореИрдВ рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмрд╛рдИ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░рдХ рд╣реИрдВ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ PRNG рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдХреНрд╕рд░ рдереЛрдбрд╝рд╛ рддреЗрдЬ, рдХрднреА-рдХрднреА рдмрд╣реБрдд рддреЗрдЬ, рдФрд░ рдХрднреА-рдХрднреА рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреИрд╕реЗ рдХрд╛рд░рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдЙрдкрд▓рдмреНрдзрддрд╛

C ++ рд╣реЗрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдирдП рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп _now_ рдХреЛ pcg_engines::cm_setseq_dxsm_128_64 рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ pcg64 рдХреЛ pcg_engines::setseq_xsl_rr_128_64 рдЗрд╕ рдирдИ рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрджрд▓ рджреВрдВрдЧрд╛ред рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдпреЛрдЬрдирд╛ рдЗрд╕ рд╡рд░реНрд╖ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдкреАрд╕реАрдЬреА 2.0 рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХреА рд╣реИред

рдФрдкрдЪрд╛рд░рд┐рдХ рдШреЛрд╖рдгрд╛рдПрдБ

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдЗрд╕ рдирдП рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣реЛрдВрдЧреЗ, рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реБрдПред

рддреБрдореНрд╣рд╛рд░реА рдкрд╕рдВрдж...

рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рди рдХрд░реЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдкреАрдб рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмреЗрд╣рддрд░ рдпрд╛ рдмреБрд░рд╛ рд╣реИред

рд╕рднреА 166 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

128 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рд╡рд┐рдВрдбреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ MT1993 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ MSVC рдХреЗ рд╕рд╛рде PCG64 рдХрд┐рддрдирд╛ рдзреАрдорд╛ рд╣реИ? рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреВрджрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

128 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рд╡рд┐рдВрдбреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ; рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдЧрд░ ABI рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВ рдХрд┐ ICC рджреНрд╡рд╛рд░рд╛ рдмрд╛рдзреНрдп рд╣реЛрдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХреА рдЬрд╛рдПрдЧреАред рдЕрдЧрд░ рд╣рдо рд╕рд┐рд░реНрдл рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рд╕рдВрд╕рд╛рдзрди рд╣реИ: https://godbolt.org/z/kBntXH

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреВрджрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рд╕реБрд▓рдЭрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛рдПрдБ, рдмрд▓реНрдХрд┐? рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдХрд╛рдЯ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реА рдкрд╕рдВрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд PRNGs рдХреЛ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдореЗрдВ рдмрд┐рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ "рдЙрдиреНрдирдд" рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ "рдорд╛рдирдХ"ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐ рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЙрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдо BitGenerator рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░ рд╕реЗ рдЯрдХрд░рд╛рдПрдВрдЧреЗред No default рдпрд╛ MT19937 рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЙрди рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдХреА рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЪрдкреЗрдЯ рдореЗрдВ рдЖрдиреЗ рдкрд░, рдЙрд╕ рдШрдЯрдирд╛ рдХреЛ BitGenerator s рдмрд┐рдирд╛ рд╕реЗрд▓реЗрдмрд▓ рд╕реНрдЯреНрд░реАрдо рдХрдо рд╡рд╛рдВрдЫрдиреАрдп рд▓рдЧреЗрдЧрд╛, рдФрд░ рдореИрдВ _do_ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдзрд╛рд░рдгрд╛ рдХреА рддрд░рд╣ рд╣реИ рдЬреЛ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╢реБрджреНрдз; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛; NumPy-in-project рд╢реЗрдпрд░ рдХрд┐ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╛рдпрд┐рддреНрд╡)ред рдпрд╣ рдЙрди рдХреБрдЫ рдЧрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдмреАрдЪ рдореЗрдВ .seed() ing рдХреЗ рд╕рд╛рде рджреЗрдЦрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рд╕рднреА рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ рдХрд┐ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдлреА рдмрджрд▓рд╛рд╡ рдЖрдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрди рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреА рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ MT1993 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ MSVC рдХреЗ рд╕рд╛рде PCG64 рдХрд┐рддрдирд╛ рдзреАрдорд╛ рд╣реИ?

# 13163 рдореЗрдВ @bashtage рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ, PCG64 MT19937 рдХреА рд▓рдЧрднрдЧ рдЖрдзреА рдЧрддрд┐ рд╣реИ, рдЬреЛ MSVC рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдкрд░ 23% рддреЗрдЬреА рд╕реЗ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

128 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рд╡рд┐рдВрдбреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рдХреНрд▓реИрдВрдЧ, рдЬреАрд╕реАрд╕реА, рдФрд░ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреИрд╕реЗ рдЕрдиреНрдп рдХрдВрдкрд╛рдЗрд▓рд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реА рддрд░рд╣ рд╡реЗ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рд╕рдорд╛рди рддрдХрдиреАрдХреЛрдВ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдирдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рдеред Microsoft рдиреЗ MSVC рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, MSVC рдХреЗ рд▓рд┐рдП # 13163 рд╣реИрдВрдб-рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рдиреНрд╕ 128-рдмрд┐рдЯ рдЧрдгрд┐рдд рдореЗрдВ PCG64 рдХреЗ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ Microsoft рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ рдореЗрдВ x86_64 рдореЗрдВ _mulx_u64 рдЬреИрд╕реЗ рд╕рдордХрдХреНрд╖ рдФрд░ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдЗрдВрдЯреЗрд▓ рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛрдбрд┐рдВрдЧ рдХреНрдпрд╛ рдЬреАрд╕реАрд╕реА, рдХреНрд▓реИрдВрдЧ рдФрд░ рдЗрдВрдЯреЗрд▓ рд╕рдВрдХрд▓рдХ рдЦреБрдж рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ Microsoft рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрди рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдХрдо рд╕реЗ рдХрдо рдЗрдирд▓рд╛рдЗрди рд╣реИрдВ)ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣реИрдВрдб-рдХреЛрдбреЗрдб рдЕрд╕реЗрдВрдмрд▓рд░ рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗ рд▓реЗрдХрд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдлрд┐рдХреНрд╕ рдЗрддрдирд╛ рд╢реИрддрд╛рдиреА рдЦрд░рд╛рдм рди рд╣реЛред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреВрджрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдЖрдЧреЗ рдХреВрджрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ distance , рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рджреЛ PRNG рдХрд┐рддрдиреЗ рдЕрд▓рдЧ рд╣реИрдВред рдпрд╣ PCG рдХреЗ C ++ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди C рдПрдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛ред рдмреНрдпрд╛рдЬред)

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдЖрдЧреЗ рдХреВрджрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрд╛рд╡рд▓реА рд╕реЗ рд╕рдВрднрд╡рддрдГ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рддрдиреА рд╕рд┐рдореБрд▓реЗрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдФрд░ рдЗрди рджрд┐рдиреЛрдВ рдПрдХ рдЪрд┐рдк рдкрд░ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЧрддрд┐ рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

Microsoft рдиреЗ MSVC рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИрдВред

рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╣рд┐рдпреЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛, OTOH, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдирд╛рдХреЛрдВрдбрд╛ рдпрд╛ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╕реЗ рдЙрдирдХреЗ рдкреИрдХреЗрдЬ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреЛрдиреЛрдВ рдЗрдВрдЯреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рд╢рд╛рдпрдж рд▓рд┐рдирдХреНрд╕, рдореИрдХ, рдпрд╛ рд╢рд╛рдпрдж рдПрдЖрдИрдПрдХреНрд╕ рдкрд░ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдФрд░ рд╢рд╛рдпрдж рдЕрдЧрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рддреЛ рд╡реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдпрд╣рд╛рдВ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ рдХрд┐ clang рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ uint128_t uint64_t s рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░реАрдкреИрдХреНрд╕ / рд░реАрдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: https: // godbolt.org/z/Gtp3os

рдмрд╣реБрдд рдорд╕реНрдд, @rkernред рдХреЛрдИ рднреА рдореМрдХрд╛ рдЖрдк рд╡рд╣реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП 128-рдмрд┐рдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде MSVC рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдмрд╣реБрдд рдорд╕реНрдд, @rkernред рдХреЛрдИ рднреА рдореМрдХрд╛ рдЖрдк рд╡рд╣реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП 128-рдмрд┐рдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде MSVC рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ рдЙрд╣, рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред ~ https://godbolt.org/z/a5L5Gz~

рдУрд╣, -O3 рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрджрд╕реВрд░рдд рд╣реИ: https://godbolt.org/z/QQhd

рдпрд╣ рдХрд╛рдлреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдиреЗ рдХреБрдЫ рднреА рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ /Ox (рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ?) рдЬреЛрдбрд╝рд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЗрдВрдЯреНрд░реЗрдВрд╕рд┐рдХ ( _rotr64 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рддрдп рдХрд┐рдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ MSVC рд╕реА рд░реЛрдЯреЗрдЯ рдореБрд╣рд╛рд╡рд░реЗ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред

рдЕрднреА рднреА рдПрдХ рдЯреНрд░реЗрди рдХреЗ рдорд▓рдмреЗ рдХреА рддрд░рд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рд╕реЗ, PCG64 рдХреЛрдб рдХреЛ MSVC рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд░реНрдордирд╛рдХ рдирд╣реАрдВ рд╣реИред

рдмрд╛рдХреА рд╕рдм рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ" рдХреНрдпреЛрдВ рдЪреБрдирд╛ рдЬрд╛рдП? рдпрд╣ рд╣рдореЗрдВ рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрд╛рдж рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдмрд╛рдж рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рд▓реАрдЬ рдПрд╕) рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрднрд┐рдпреЛрдЬрди рд╕реЗ рдкрд░реЗ "рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ", рдЬрдм рд╣рдо рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдмрд┐рдЯрдЧреЗрдВрдиреЗрдЯрд░ рд╣рд╛рд░реНрдб рдХреЛрдбреЗрдб рд╣реЛрддрд╛ рд╣реИ, (рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ), рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рдкрд░рд┐рд╖реНрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдм рдЕрдкрдирд╛ рдХреЛрдб рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрдирдХреА рдкрд╕рдВрдж рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭреЗрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) рд╢реНрд░реЗрд╖реНрда рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрд┐рдЯ-рд╕реНрдЯреНрд░реАрдо рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдмреАрдЪ рдХрд┐ рдмрд┐рдЯ-рд╕реНрдЯреНрд░реАрдо рд╣рдореЗрд╢рд╛ рдмрдирд╛рдо рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░ рд░рд╣реЗрдЧрд╛ рдХрд┐ NumPy рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛-рдмреНрд░рд╛рдВрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рджреВрд╕рд░реА рдзрд╛рд░рдгрд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ, рднрд▓реЗ рд╣реА рд╡рд╣ рдкрд╣рд▓реЗ рддреЛрдбрд╝рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреИрд░, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рдпрд╛ рдХреНрдпрд╛ рд╣реЛ, рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрднрд┐рдпреЛрдЬрди рд╕реЗ рдкрд░реЗ "рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ", рдЬрдм рд╣рдо рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдЖрдк "рдХреБрдЫ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЕрднрд┐рдпреЛрдЬрди рд╕реЗ рдкрд░реЗ "рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ", рдЬрдм рд╣рдо рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдЖрдк "рдХреБрдЫ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

@mattip рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╡реЙрдбрд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкрд╛рдЧрд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреМрдбрд▓ рдХреЛ рдХреБрдЫ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ

g = Generator()
g.bit_generator.seed(1234)

рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдпрд╣ рдЧрд▓рдд рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдзрд┐рдХ рд╕рдордЭрджрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

Generator(BitGenerator(1234))

рддрдм рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред

IMO, рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдкрд╕рдВрдж рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рддрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреЛрдИ рдШрд╛рддрдХ рджреЛрд╖ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЗрдВрдЯреЗрд▓ рдЕрдкрдиреЗ рдЪрд┐рдкреНрд╕ рдореЗрдВ рдПрдХ QUANTUM_NI рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдИ OOM рд╕реБрдзрд╛рд░ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЬреЛ PRNG рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рддрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред (рд╕реА ++ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std::default_random_engine рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣реИ рдФрд░ рд░рд┐рд▓реАрдЬ рд╕реЗ рд░рд┐рд▓реАрдЬ рддрдХ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред)

рдмрд▓реНрдХрд┐, рдкреВрд░реНрд╡ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдмрд╛рд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рд╣реА рдмреЗрдХрд╛рд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MT19937 _is_ MT19937, рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд╡реАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред [рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмреЗрдХрд╛рд░ рд╣реИред]

рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдЧ рдкреБрд░рд╛рдиреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рд╕реЗ рдкрд┐рдЫрд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ред (рдЖрдк рдПрдХ рдкреВрд░реНрд╡ рд░рд┐рд▓реАрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред)

рдЕрдЧрд░ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рддреЛ рднреА, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдореМрдЬреВрдж рдХреЛрдИ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреБрд╢рд▓ advance , рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрд╕реЗ рджреВрд░ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗред (рдЖрдк рд╕рдВрднрд╡рддрдГ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдЙрдиреНрдирдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдЦреБрдж рдХреЛ рдПрдХ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЪреБрдирд╛рд╡ рдХреЗ рд▓рд┐рдП рджрд╛рдВрд╡ рднреА рдХрдо рдХрд░ рджреЗрдЧрд╛ред

(Fwiw, рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкреАрд╕реАрдЬреА рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреАрд╕реАрдЬреА 32-рдмрд┐рдЯ PRNG рд╡рд░реНрддрдорд╛рди рдореЗрдВ XSH-рдЖрд░рдЖрд░ рд╕рдВрд╕реНрдХрд░рдг [рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣реБрдБрдЪрд╛ рд╣реИ pcg_setseq_64_xsh_rr_32_random_r рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдФрд░ pcg_engines::setseq_xsh_rr_64_32 рд╕реА рдореЗрдВ рдХрдХреНрд╖рд╛ ++ рдкреБрд╕реНрддрдХрд╛рд▓рдп], рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╡рд┐рд╖реНрдп-рдкреНрд░реВрдл рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ XSH-RR рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп pcg32_random_r рдпрд╛ pcg32 рдЬреЛ рдЙрдкрдирд╛рдо рд╣реИрдВ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХреБрдЫ рдФрд░ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ред)

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ 90% рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ 14 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИ), рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдП) рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдХрд░реНрд╖рдХ рдХрд╛рд░рдг рдФрд░ (рдмреА) рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рд╛рд▓ рд▓реЗ рд▓реЛ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдЪрдХреНрд░ред

рдЖрдЬ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдПрдХ рдЪреАрдЬрд╝ рдЬреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЙрдЧрди рдХреЗ рдмрд╛рдж PRNG рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╛рди рдорд╛рдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдПрдХ PRNG рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ uint128 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо MS рдХреЛ рдПрдХ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ Win64 рдХреЗ рд▓рд┐рдП uint128 рд╕рдорд░реНрдерди (рд╡рд╕рд╛ рдореМрдХрд╛) рдпрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдЬреЛрдбрд╝рдиреЗ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ

g = Generator()
g.bit_generator.seed(1234)

рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдпрд╣ рдЧрд▓рдд рд╣реЛрдЧрд╛ред

рдареАрдХ рд╣реИ, рдХрд┐ "рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, @ eric-wieser рдХреЗ рд╕рд╛рде рдмрд╣рд╕ рд╣реЛ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ "рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред ред "

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рдорд╛рдирдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдЕрдиреБрдХреВрд▓ рдХреЗ рдмреАрдЪ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЪреБрдиреВрдВрдЧрд╛:

рдЕрднреА:

Generator() # OK
Generator(DefaultBitGenerator(seed)) # OK
Generator(seed) # error

_рдореЗрд░реА рдкреНрд░рд╛рдерд┐рдорд┐рдХрддрд╛:

Generator(1234) == Generator(DefaultBitGenerator(1234)
Generator(*args**kwargs) == Generator(DefaultBitGenerator(*args, **kwargs))

рдЕрдм рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реИрдВрдбрдорд╕реНрдЯреЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рдВрдмрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬреЛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдереЛрдбрд╝рд╛ рдЬрдирд░реЗрдЯрд░ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВред

рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдЦреБрдж рдХреЛ рдПрдХ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЪреБрдирд╛рд╡ рдХреЗ рд▓рд┐рдП рджрд╛рдВрд╡ рднреА рдХрдо рдХрд░ рджреЗрдЧрд╛ред

рд╣рд╛рдБ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕реЗ BitGenerator s рд╣рдбрд╝рдк рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ MT19937 , PCG64 , рдЗрддреНрдпрд╛рджрд┐) рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреАрдЬ рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ред BitGenerator рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдпреВрдирд┐рдлрд╝реЙрд░реНрдо рдпреВрдирд┐рдлрд╝реЙрд░реНрдо PRNG рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдпреВрдирд┐рдлрд╝реЙрд░реНрдо [0..1) float64 s рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ (рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреЛ рднреА рдордЬрд╝реЗрджрд╛рд░ рдХреВрджрд╣реЗрдб / рд╕реНрдЯреНрд░реАрдо рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред ред Generator рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ BitGenerator рд╡рд╕реНрддреБ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЧреИрд░-рд╕рдорд╛рди рд╡рд┐рддрд░рдг, рдЧреЙрд╕рд┐рдпрдВрд╕, рдЧрд╛рдорд╛, рджреНрд╡рд┐рдкрдж, рдЖрджрд┐ рдХреЗ рд╕рднреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрддрд╛ рд╣реИред BitGenerator s рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рд╕реНрдЯреНрд░реАрдо рдЕрдиреБрдХреВрд▓рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рд╣рдо рдХрд┐рд╕реА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ (рдЬреЛ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ), рдФрд░ рди рд╣реА рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рд╢реНрди "рдХреНрдпрд╛ g = Generator() , рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ, рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?" рдЕрднреА, рдкреАрдЖрд░ рдореЗрдВ, рдпрд╣ рдПрдХ рдордирдорд╛рдирд╛ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ Xoshiro256 BitGenerator рдмрдирд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА /dev/urandom рдЬреИрд╕реЗ рдЕрдЪреНрдЫреЗ рдПрдВрдЯреНрд░реЛрдкреА рд╕реНрд░реЛрдд рд╕реЗ рддреИрдпрд╛рд░)ред "рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╡рд┐рдХрд▓реНрдк рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реЛ; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ BitGenerator рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред @ eric-wieser рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ "рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ" рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ _safe_ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрд╛рдж рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдВрдЧреА рдЬреИрд╕реЗ рдореМрдЬреВрджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдмрджрд▓рдирд╛ред

@ рдХреНрд░реЗрдВрдХ , рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдмреАрдЬ рдХреЛ рдЙрдкрд▓рдмреНрдз рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реЗ рд╕реНрд╡-рдкреНрд░рддрд┐рд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИ - рдпрд╣ рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХрднреА рднреА рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ ( рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреАрдЬ рдорд┐рд▓реЗ)ред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, @bashtage рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреАрдЬ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@rkern , рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓

рдЗрд╕рдХреЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк BitGenerator рдкреБрдирд░реНрдирд┐рдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЕрдЧрд░ Generator() рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдПрдХ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЗрд╕реЗ рдмреАрдЬ рджреЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ @bashtage рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ:

g = Generator()
g.bit_generator.seed(seed)

рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдердХрд╛рдК рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╢рд╛рдпрдж рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ Generator(PCG64(<seed>)) рд╡реИрд╕реЗ рднреА рдЪреБрдирддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ-рд╡рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, @bashtage рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо _also_ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рд╡рд╛рд▓ рд░рдЦрддреЗ рд╣реИрдВ: "рд╡реЗ рд╕рднреА рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рддрддреНрдХрд╛рд▓ рднреЗрдЬ рджреЗрдВ? рдФрд░ рдпрджрд┐ рдЙрди рддрд░реАрдХреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рддреЛ рдЙрди рдЪреВрдХ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?" рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Generator(<seed>) рдпрд╛ Generator(DefaultBitGenerator(<seed>)) рд▓рд┐рдП рдХреБрдЫ рдЦреБрд▓реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реНрдкреЗрд╕ рдФрд░ @bashtage рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЕрднреА рднреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред

@bashtage рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдорджрдж рдХрд░реЗрдЧрд╛? рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдордиреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╣рд╛ " PCG64 рд╣рдорд╛рд░реА рдкрд╕рдВрджреАрджрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ BitGenerator " рд╣реИ рдФрд░ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ Generator(PCG64(seed)) рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ (рдЬрдм рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)?

рдореИрдВ default_generator(<seed>) _function_ Generator(<seed>) рдпрд╛ g=Generator();g.seed(<seed>) рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдлрд┐рд░ рдЕрдЧрд░ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╕рд╛рдорд╛рди рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП experimental рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрдВрдЧрд▓реА рдореЗрдВ рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдХреБрдЫ рд╕рдордп рдорд┐рд▓ рд╕рдХреЗред

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ DefaultBitGenerator рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╡рд░рдг рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдЕрдиреНрдп рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯрдЧреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдмрдВрдзреА рдзрд╛рд░рдгрд╛ рдмрдирд╛рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдмреЗрд╣рддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореИрдВ @bashtage рд╕реЗ рд╕рд╣рдордд Generator , рдЬреИрд╕реЗ, np.random.Generator(1234) рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ DefaultBitGenerator ред

Generator рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдкреВрд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ NumPy рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рдерд╛ред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ @imneme рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

(рдЕрднреА рдпрд╣ рдПрдХ рдкреВрд░реНрд╡ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рджреЗрдЦрд╛)

рдУрд╣, -O3 рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрджрд╕реВрд░рдд рд╣реИ: https://godbolt.org/z/QQhd

MSVC рдХреЗ рд▓рд┐рдП, рдпрд╣ -O3 , рдпрд╣ /O2 рдпрд╛ /Ox (рд▓реЗрдХрд┐рди /O3 !) рдирд╣реАрдВ рд╣реИред

Generator рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдкреВрд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдиреНрдпреВрдкреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рдерд╛ред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ @imneme рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдФрд░ рднреА рдмреЗрд╣рддрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ version рддрд░реНрдХ, рдЬреИрд╕реЗ рдЕрдЪрд╛рд░ рдХреЗ protocol рддрд░реНрдХ , рдореЗрдВ Generator / DefaultBitGenerator ред рддрдм рдЖрдк np.random.Generator(123, version=1) рдЬреИрд╕рд╛ рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ "рд╕рдВрд╕реНрдХрд░рдг 1" рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ (рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ) рдпрд╛ np.random.Generator(123, version=np.random.HIGHEST_VERSION) (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░) рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рдирд╡реАрдирддрдо / рдорд╣рд╛рди рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬреЛ рдХреБрдЫ рднреА рд╣реИ)ред

рд╕рдВрднрд╡рддрдГ version=0 MT19937 рдЬреЛ рдХрд┐ NumPy рдиреЗ рдЕрдм рддрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ version=1 рдЬреЛ рднреА рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣рдо рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ DefaultBitGenerator рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рд░рд╛рдЬреНрдп рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╡рд░рдг рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдЕрдиреНрдп рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯрдЧреЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдмрдВрдзреА рдзрд╛рд░рдгрд╛ рдмрдирд╛рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдмреЗрд╣рддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рдордордоред рдпрд╣ рдЕрдкреАрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ _feels_ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдУрд╡рд░рдХреЙрдореНрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЧреЙрд░реНрдбрд┐рдпрди рдЧрд╛рдБрда рдореЗрдВ рдПрдХ рдФрд░ рд▓реВрдк рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ (рдФрд░ рдпрд╣ рдХрд┐ _should_ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░-рдПрд╕реНрдХ рд╕реНрдЯреНрд░реЛрдХ рдЙрдкрд▓рдмреНрдз рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдмреБрд░реА рдмрд╛рдд рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдирд╛ рд╣реИред рдпрд╣ _does_ рд╢реЗрд╖ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ: рд╣рдо рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджрд░рдЕрд╕рд▓, рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ $ # $ 1 $ # $ $ $ $ $ $ # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ version pickle Generator DefaultBitGenerator ред

рдореИрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдХрдо рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред pickle рдХреЗрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рд░реНрдердХ рдирд╛рдо рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рддрдВрддреНрд░ рд╣реИред

рдореИрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдХрдо рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред pickle рдорд╛рдорд▓реЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рд░реНрдердХ рдирд╛рдо рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рддрдВрддреНрд░ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ NumPy рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  • np.random.Generator(seed, version=0) рдмрдирд╛рдо np.random.Generator(seed, version=1)
  • np.random.Generator(MT19937(seed)) рдмрдирд╛рдо np.random.Generator(PCG64(seed))

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ RNG рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд┐рд╕реА рднреА рдбреЙрдХреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ version=1 (рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ) version=0 рддреБрд▓рдирд╛ рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рд╕рднреА рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, MT19937 рдФрд░ PCG64 рдЬреИрд╕реЗ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рд╣реИрдВ, рдпрд╛ рдРрд╕реЗ рд▓реЛрдЧ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝

рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рднреА version рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ _want_ред рд╡реЗ рдХреЗрд╡рд▓ version рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╡реЗ рдЬреНрдЮрд╛рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП _need_ рд╣реЛред рд╡реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдирд┐рд╣рд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА) рдЙрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЬреЛ рд╡реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ; рдЙрдиреНрд╣реЗрдВ рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд░реЙрд╕-рд░рд┐рд▓реАрдЬрд╝ рд░рд┐рдкреНрд░реЛрдбреНрдпреВрд╕рдмрд┐рд▓рд┐рдЯреА рдХрд╛ рд╕реНрддрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдПрдирдИрдкреА 19 рдореЗрдВ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • 99.9% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЬрд╛рдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдмрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП +1, рдХреГрдкрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рди рдЪреБрдиреЗрдВред
  • dSFMT MT19937 рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╕ рдПрдХ рддреЗрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рд▓рдЧрддрд╛ рд╣реИ (рдбреЙрдХреНрд╕ рдореЗрдВ рдпрд╣ рдмрддрд╛рдХрд░ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдФрд░ "SSE2" рд╣рдЯрд╛ рджреЗрдВ)ред рдЪреВрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рдкреНрд░рдЬрдирди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЕрдВрддрд░ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ рдФрд░ dSFTM рдХреЛ MT19937 рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдпрд╣рд╛рдВ рдЬреАрддрдиреЗ рд╡рд╛рд▓рд╛ рддрд░реНрдХ "рд▓реЗрдЦ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рджреМрд░рд╛рди рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗ" ред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдг рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ _very_ рдЫреЛрдЯреЗ рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВред рд╕рднреА рд╢рд╛рдорд┐рд▓ рдЬрдирд░реЗрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП +1ред

рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рд▓реЗрдХрд┐рди 32-рдмрд┐рдЯ рдЕрднреА рднреА рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ - рджреЗрдЦреЗрдВ https://github.com/pypa/manylinux/issues/118#issuecomment -481404761

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд░рд┐рд╕реИрдорд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдкрд╛рд░реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред рдпрджрд┐ рдкрд╛рдпрдерди рдХреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдереЛрдбрд╝рд╛ рдореИрд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╖реНрдард╛ рдорд┐рд▓рддреА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛ, рдЬреЛ рдХрд┐ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдПрдХ рдмрд╛рдзрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдкрд╛рдпрдерди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд╛ рдкреИрдХреЗрдЬ рдерд╛ рдЬреЛ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреЗрдЬреА рд╕реЗ рдирд╣реАрдВ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдЬрд┐рд╕ рд╣рдж рддрдХ рд╣рдо рдЗрд╕реЗ рдЯрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмреИрдХ-рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рдлреЛрд░реЗрдВрд╕рд┐рдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ: https://arxiv.org/pdf/1810.10985.pdf

рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рджреЗрддреА рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ PRNG рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ IIDU [0,1) рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА рддреНрд░реБрдЯрд┐ [20, 7, 2, 16, 15]ред рд╣рдо рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ MATLAB, рдкрд╛рдпрдерди рдХреЗ рд░реИрдВрдбрдо рдореЙрдбреНрдпреВрд▓, R, SPSS рдФрд░ Stata рд╕рд╣рд┐рдд рдХрдИ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдзрд╛рд░рдгрд╛ рдЧрд▓рдд рд╣реИред

@kellieotto , @pbstark - рдХреНрдпрд╛ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ PRNG рдХреЛ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рд╕реЗ рдХреНрдпрд╛ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рдЖрдзрд╛рд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдкреБрди: рдирдореВрдирд╛рдХрд░рдг рдХреЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдкрд╛рд░реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред

рдорд╛рдирд╛ред рдЬрдм рддрдХ рд╡реЗ рдЧреБрдг рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ, рддрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЬреЛ рдЪрд┐рдВрддрд╛рдПрдБ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ, рд╡реЗ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рдж рдЕрдХрд╛рджрдорд┐рдХ рд╣реЛрддреА рд╣реИрдВред

рдХреБрдЫ рдлреЛрд░реЗрдВрд╕рд┐рдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ: https://arxiv.org/pdf/1810.10985.pdf

рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд▓реЗрдЦред рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдХрд┐ NumPy рдПрдХрдорд╛рддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ R, рдкрд╛рдпрдерди stdlib & co рдХреЗ рд╡рд┐рдкрд░реАрдд рдЗрд╕реЗ рд╕рд╣реА (рдкреГрд╖реНрда 9 рдХреЗ рдКрдкрд░) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдХрд╛рдЧрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рднреА рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХрдм рд╣реИ? рдЖрд░ рдХреЗ sample рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг ~ 1.7 рдмрд┐рд▓рд┐рдпрди рдирдореВрдиреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рддреЗ рд╕рдордп 40% рд╕рдВрдЦреНрдпрд╛ рдФрд░ 60% рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ / рдкреБрдирдГрд╕рдорд░реНрдкрдг рдХреНрдпрд╛ рд╣реИ?

рдЖрд░ (3.6) рдХреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рдЯреНрд░рдВрдХреЗрд╢рди рдмрдирд╛рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдареАрдХ рдХрд░рддреА рд╣реИ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Mersenne рдЯреНрд╡рд┐рд╕реНрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╣рддрд╛ рд╣реИ
PRNG, рдпрджреНрдпрдкрд┐ред

@ рдХреЗрд▓реА рдУрдЯреЛрдмреЛрдиреА [email protected] рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ PRNG рдЗрди рд╣реИ
рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рднрд╛рд╖рд╛ рдФрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреИрдХреЗрдЬ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
рд╕реБрд░рдХреНрд╖рд┐рдд (рдПрдХ CS-PRNG, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рдЙрдВрдЯрд░ рдореЛрдб рдореЗрдВ SHA256), рдЧрд┐рд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде
рдХрдо рддреЗрдЬреА рд╕реЗ рд▓реЗрдХрд┐рди рдХрдо рдЧреБрдгрд╡рддреНрддрд╛ (рдЬреИрд╕реЗ, рдореЗрд░реНрд╕реЗрди рдЯреНрд╡рд┐рд╕реНрдЯрд░) рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕
рдЕрдЧрд░ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ CS-PRNG рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
https://github.com/statlab/cryptorandom

рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрднреА рддрдХ)ред рдЕрдбрд╝рдЪрди рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИ
рдмрд╛рдЗрдирд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рд╣реИрд╢ рдЖрдЙрдЯрдкреБрдЯ) рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреЗ рднреАрддрд░ред рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдХрд╛рд░реНрдп рдХреЛ рд╕реА рдкрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдирд╛ред

рдЪреАрдпрд░реНрд╕,
рдлрд┐рд▓рд┐рдк

рд╕реЛрдо, 27 рдордИ, 2019 рдХреЛ рд╕реБрдмрд╣ 6:27 рдмрдЬреЗ рд░рд╛рд▓реНрдл рдЧреЛрдореНрдорд░реНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣реИрдВ
рдореЗрдВ resampling рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдкрд╛рд░реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдорд╛рдирд╛ред рдЬрдм рддрдХ рд╡реЗ рдЧреБрдг рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ
рдорд╛рдорд▓реЛрдВ, рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЬреЛ рдЪрд┐рдВрддрд╛рдПрдБ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ, рд╡реЗ рд╣реИрдВ
рд╣рдореЗрд╢рд╛ рдмреЗрд╣рдж рдЕрдХрд╛рджрдорд┐рдХред

рдХреБрдЫ рдлреЛрд░реЗрдВрд╕рд┐рдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ:
https://arxiv.org/pdf/1810.10985.pdf

рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд▓реЗрдЦред рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдХрд┐ NumPy рдХреЗрд╡рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдЗрд╕реЗ рд╕рд╣реА рдмрдирд╛рддрд╛ рд╣реИ (рдкреГрд╖реНрда 9 рдХреЗ рдКрдкрд░), рдЖрд░, рдкрд╛рдпрдерди stdlib & co рдХреЗ рд╡рд┐рдкрд░реАрддред

рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
рдХрд╛рдЧрдЬред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рднреА рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ,
рдХрдм рд╣реИ рд╡реЛ? рдЖрд░ рдХреЗ рд╕реИрдВрдкрд▓ рдлрдВрдХреНрд╢рди рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг 40% рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
рд╕рдВрдЦреНрдпрд╛ рдФрд░ 60% рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рдЬрдм рдбреНрд░рд╛рдЗрдВрдЧ ~ 1.7 рдмрд┐рд▓рд┐рдпрди рдирдореВрдиреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реИ?
рдпрд╣рд╛рдБ рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ / рд░реЗрдЬрд╝реЛрдорд▓рд┐рдВрдЧ рдмрд░рд╛рдмрд░ рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWJJEIA4CTLLHVZZKKVPVPUU5CNFSM4HPX3CHKYY3PNWH8H8H8646H8&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWJW445QDPGZDGXMPA3PXPOUFANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдзрд╛рд░ рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдг рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ _very_ рдЫреЛрдЯреЗ рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВред рд╕рднреА рд╢рд╛рдорд┐рд▓ рдЬрдирд░реЗрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП +1

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, "рд╕рдмрд╕реЗ рддреЗрдЬрд╝" рд▓реЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред @bashtage рдиреЗ # 13163 рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдкрд░

рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЧрддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢" рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИред рдкрд╛рдпрдерди рд╣реА рд╕реА рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рд▓рдЧрднрдЧ 50 ├Ч рдзреАрдорд╛ рд╣реИ ред NumPy рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд┐рд╕ рдЕрдВрд╢ рдХреЛ PyPy рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЬреЛ 4 ├Ч рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдЧрд╛)? рдХреБрдЫ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдЙрд╕ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢" рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдКрдкрд░ рджреА рдЧрдИ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдпрд╣ рд╢рдмреНрдж рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ PRNG рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдЪрд▓реЗрдЧрд╛? рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭрджрд╛рд░ рдмрд╛рдд (рдпрд╣ рднреА рдХрд╛рдлреА рдордЬреЗрджрд╛рд░ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкрд╣реБрдВрдЪ рдХреЗ рднреАрддрд░) рд╡рд┐рднрд┐рдиреНрди рдЙрдкрд▓рдмреНрдз PRNGs рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд░рдирд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рдмрд╕реЗ рддреЗрдЬ рд╣реИ _ рдЙрдирдХреЗ рд▓рд┐рдП_ред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджреНрдпрдкрд┐ рд╡реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реБрд░рд╛рдЧ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд┐рд╢реЗрд╖ PRNG рдкрддрд╛ рд▓рдЧрд╛рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░рдбрд╛рд░ рдкрд░ рдирд╣реАрдВ (рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИ)ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрдм рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдкрд┐рддреГрджреЛрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рд╣реИ - рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреБрдЪрд░ рдХреЛ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рд╕рднреА рд╢рд╛рдорд┐рд▓ PRNG рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдХрдо рдмрд╛рд░ рд╣реИред рдпреВрдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдиреЗ рд╕реА-рд▓рд╛рдЗрдмреНрд░реЗрд░реА PRNGs рдХреЗ рд╕реНрдореЛрд░реНрдЧрд╛рд╕реНрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рднрдпрд╛рдирдХ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рднреА рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдзреБрд░реА рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рд╕реЗ рдкрд░реЗ, рдРрд╕реЗ рдЕрдиреНрдп рдЧреБрдг рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЪрд╛рд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдирд┐рдЬреА рддреМрд░ рдкрд░, PRNGs рдХреЗ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рддреБрдЪреНрдЫ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ PRNG рдХреЗ рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ рдФрд░ рдлрд┐рд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ, рдпрд╣ рдХрд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ NumPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдРрд╕рд╛ рдХреЛрдИ рд╡рд┐рд░реЛрдзреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрдиреБрдХреНрд░рдо рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рд▓рд╛рдн рдЙрдард╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ NumPy рдХреЗ PRNGs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NumPy рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдЬрд╣рд╛рдБ PRNG рдорд┐рд▓ рдЪреБрдХреЗ рд╣реИрдВ; рдпрд╣ рдХреЛрдб рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд░реЛрдзреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ PRNG рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛ред рдЗрд╕ рд╡рд┐рдХрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдордЬрдмреВрддреА рд╕реЗ рдмреАрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрддрд┐ рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рди) рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдореВрд▓реА рдмреАрдорд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рдлреЛрд░реЗрдВрд╕рд┐рдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ: https://arxiv.org/pdf/1810.10985.pdf

рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рджреЗрддреА рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ PRNG рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ IIDU [0,1) рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╕рд╛рдордЧреНрд░реА рддреНрд░реБрдЯрд┐ [20, 7, 2, 16, 15]ред рд╣рдо рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ MATLAB, рдкрд╛рдпрдерди рдХреЗ рд░реИрдВрдбрдо рдореЙрдбреНрдпреВрд▓, R, SPSS рдФрд░ Stata рд╕рд╣рд┐рдд рдХрдИ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдзрд╛рд░рдгрд╛ рдЧрд▓рдд рд╣реИред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдмрд╛рдпрд▓реЗрдо рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реАрдорд╛ рдореЗрдВ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреЗрдкрд░ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рднреА рддрд▓рд╛рд╢рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдВрдкрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред (64-рдмрд┐рдЯреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп, Lemire рдХреА рд╡рд┐рдзрд┐ рдзреАрдореА-рдмрд┐рдЯ 64-рдмрд┐рдЯ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 128-рдмрд┐рдЯ рдЧреБрдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рд╕рднреА рдкрд░рд┐рдЪрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ MSVC рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред)

@pbstark @kellieotto рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреЗрдкрд░ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рдХреЗ рд╕рд╛рде рдкрдврд╝рд╛ рдЬрдм рдпрд╣ arXiv рдкрд░ рджрд┐рдЦрд╛ред рдореИрдВ BIDS рдореЗрдВ рдХреБрдЫ рджреЛрд╕реНрддреЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЗ рдХрд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рдЪрд░реНрдЪрд╛ рдЦрдВрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ "рдЕрдм рддрдХ, рд╣рдордиреЗ MT19937 рдХреЗ рд▓рд┐рдП O (10 ^ 5) рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрдХрдбрд╝рд╛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдПрдХ рдкрд╛рдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдкрдХреЛ PCG64 рдЬреИрд╕реЗ 128-рдмрд┐рдЯ PRNG рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рд╛ рд╣реИ? рдпрд╣ рдореБрдЭреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕реАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рджреВрд╕рд░реЛрдВ (IMO) рдХреЛ рдкрдЫрд╛рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗред

рд╣рдорд╛рд░реЗ рдирдП PRNG рдлреНрд░реЗрдорд╡рд░реНрдХ # 13163 рдХреА рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рдЕрдкрдирд╛ BitGenerator рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдкреНрд▓рдЧ рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реБрдкреА рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛрдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдХреЛрдбред рдореИрдВ рдЖрдкрдХреЛ cryptorandom рдХреЛ BitGenerator C рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рд░ рд╕реЗ рд╕рд┐рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХреЗрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдореАрд▓ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ (рдпрд╣ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ)ред рд╣рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рднреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рд╣реИрдВ (рдбреЙрдХреНрд╕ рдореЗрдВ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рд╕реЗ рдХрддрд░рд╛рддрд╛ рд╣реВрдВред
рд╡рд╣ рд▓реЗрдЦ рдЬрд╣рд╛рдВ рдиреЗрдореНрдкреА рдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ (рд╢рд╛рдпрдж рдпрд╣ рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░реЙрдмрд░реНрдЯ рдХреЛ рдХреБрджреЛрд╕ рд▓рдЧрддрд╛ рд╣реИ!), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдореВрдирд╛ рд╣реИ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдирд╣реАрдВред

@pbstark рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ BitGenerator рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ numpy / randomgen рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ? рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЗрд╕реЗ рдЧрддрд┐ рджреЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реЛред рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдФрд░ рдХреЗрд▓реА рдУрдЯреЛрдмреЛрдиреА рдмрд░реНрдХрд▓реЗ рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ? (рдмрд╕ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡, рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреЛрдб рдкрд░ рдЦреБрдж рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЙрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ _Random рдирдореВрдирд╛рдХрд░рдг: рдЕрднреНрдпрд╛рд╕ рдмрдирд╛рддрд╛ рд╣реИ Imperfect_ рдХрд╛рдЧрдЬ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1 рдЯреНрд░рд┐рд▓рд┐рдпрди рдХреЛрд░ 100 рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо 2 ^ 102 рдирдВрдмрд░ рд╕реЗ рдХрдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред

рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд PRNGs (Mersenne Twister рдЬреИрд╕реЗ рдмрдбрд╝реЗ рд░рд╛рдЬреНрдп рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╡рд╛рд▓реЗ рднреА) рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдо рдХрднреА рднреА рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ рддреЛ рдмреАрдЬ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) ), рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЧреИрд░-рддреБрдЪреНрдЫ-рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп PRNGs рдХреЗ рд▓рд┐рдП рд╣рдо (рдЖрд╕рд╛рдиреА рд╕реЗ) рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдо рдХрднреА рднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рджреБрд░реНрд▓рдн рд╣реИрдВ рдХрд┐ рд╣рдо рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрднреА рднреА рдЦреЛрдЬ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ PRNG рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ 2 ^ 80 рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рднреАрддрд░ рдЗрд╕рдореЗрдВ _Twelth Night_ рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдереВрдХ рджреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рдХрднреА рдЗрд╕реЗ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИред)

рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдзреБрдирд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ
рдПрдИрдПрд╕ рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрд╕рдореЗрдВ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдирд┐рд░реНрджреЗрд╢ рд╣реИред @ рдмреНрд▓реЗрдпрд░ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
рдпрд╣рд╛рдБ https://github.com/lemire/testingRNG/blob/master/source/aesctr.h
рдиреЙрдирдЯреНрд░рд┐рдкреНрдЯреЛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╣реИред рдЪрдЪрд╛ 20 рднреА рд╣реИ рдЬреЛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
SIMD рдХреЗ рд╕рд╛рде рдЙрдкрд╡рд╛рд╕ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреБрд░рд╛рдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рджреЛрдиреЛрдВ рдХреБрддреНрддреЗ рдзреАрдореЗ рд╣реЛрдВрдЧреЗред рддреАрди рдмрд╛рд░ рдФрд░
рдлрд┐рд▓реЙрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрд▓рд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рд┐рдВрдЬ рд╣реИрдВред

IMO рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЧрдд рд▓рд╛рднреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдУрд╡рд░рд░реЗрдЯреЗрдб рд╣реИред рдореБрдЭреЗ рдХрд┐рд╕реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ
рдорд╛рдЙрдВрдЯ рдХреЗ рд╕рд╛рде PRNG рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд╛рдкрд╕реА, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
10e6 рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрддреНрд░реЛрдВ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ
рдЬрд╣рд╛рдВ PRNG рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдереЗ, рдРрд╕реЗ рдорд╛рдорд▓реЗ рдереЗ рдЬрд╣рд╛рдВ рдЕрд╡рдзрд┐ рдЗрддрдиреА рдереА
рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдЬрдирд░реЗрдЯрд░ рдиреЗ рдкреВрд░рд╛ рдЪрдХреНрд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХрдорд╛рддреНрд░
рдкреНрд░рднрд╛рд╡ рдЕрдзреНрдпрдпрди рдХреЗ рдирдореВрдиреЗ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЦреНрдп рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛
рдПрдХ рдмрд╛рд░ рдПрдХ рдмрдбрд╝реА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рдгрд╛рдоред

рд╕реЛрдо рдкрд░, 27 рдордИ, 2019, 19:50 рд░реЙрдмрд░реНрдЯ рдХрд░реНрдиреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@pbstark https://github.com/pbstark @kellieotto
https://github.com/kellieotto рдЬрдм рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреЗрдкрд░ рдХреЛ рд░реБрдЪрд┐ рдХреЗ рд╕рд╛рде рдкрдврд╝рд╛
ArXiv рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ BIDS рдореЗрдВ рдХреБрдЫ рджреЛрд╕реНрддреЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдерд╛
рдЕрдкрдиреЗ рдХрд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдЪрд░реНрдЪрд╛ рдЕрдиреБрднрд╛рдЧ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рдЕрдм рддрдХ, рд╣рдордиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
рд▓рдЧрд╛рддрд╛рд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдБрдХрдбрд╝рд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ
O (10 ^ 5) "MT19937 рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐" рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдПрдХ рдкрд╛рдпрд╛ рд╣реИ?
PCG64 рдЬреИрд╕реЗ 128-рдмрд┐рдЯ PRNG рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕реАрдорд╛ рд╣реЛ, рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ
рдХрдо рд╕реЗ рдХрдо рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рджреВрд╕рд░реЛрдВ (IMO) рдХреЛ рдкрдЫрд╛рдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯред

рд╣рдорд╛рд░реЗ рдирдП PRNG рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ # 13163
https://github.com/numpy/numpy/pull/13163 рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ BitGenerator рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЕрднреА рдкреНрд▓рдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдирд╣реАрдВ рд╣реИ
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЦрд╕рд░реЗ рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ
C рдореЗрдВ BitGenerator рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реЗрдВ
рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рд░ рд╕реЗ рд╕рд┐рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=ABKTSRO5PKW4MRFSBGUFUNTPXQUQUOLA_NFSM4HPX3CHKYY3PNVWKWH3LFDFDLFDLFDLFDLFDFDLFDFDLFDFDLFDFDLFDFDLFDFDLFDFDLFDDFDLFDLFDRFDRFDRFDBHBHBHBHBHBHBFBHBRBDBKBBJBDBDJDBDB-рджрд┐рди -рд░реНрд╖рд╡реЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЬреЛрдбnрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABKTSRMRIHC4OYDR52HLTHDPXQUOLANCNFSM4HPX3CHA
ред

рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЧрддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ "рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрд╢" рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИред рдкрд╛рдпрдерди рд╣реА рд╕реАред рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 50 ├Ч рдзреАрдорд╛ рд╣реИред рдиреБрдорд╛рдЗрдкреА рдпреВрдЬрд░рдмреЗрд╕ рдХрд╛ рдХреМрди рд╕рд╛ рдЕрдВрд╢ рдЗрд╕реЗ PyPy рдкрд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ (рдЬреЛ 4 ├Ч рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдЧрд╛)? рдХреБрдЫ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВ :) NumPy рдЬреНрдпрд╛рджрд╛рддрд░ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╕реА рд╣реИ, рдФрд░ рд╕реА рдореЗрдВ рдЕрдкрдиреА рдЪреАрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЬреНрдпрд╛рджрд╛рддрд░ рддреЗрдЬреА рд╕реЗ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PyPy рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдзреАрдорд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ CPPthon API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╣реИ рдЬрд┐рд╕реЗ NumPy рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдкрдиреЗ JIT рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдпрд╣ рдСрдл рдЯреЙрдкрд┐рдХ рд╣реИред рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдЧрддрд┐ рдХрд╛ рдорд╛рдорд▓рд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд╣реАрдВ рд╣реИред

@imeme рд╣рдо
рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдХреЗ рд╕рд╛рде рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рд╣реИ
рдЕрдЪреНрдЫрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред

рд╕реЛрдо рдкрд░, 27 рдордИ, 2019, 19:46 imneme рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

рдХреБрдЫ рдлреЛрд░реЗрдВрд╕рд┐рдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ:
https://arxiv.org/pdf/1810.10985.pdf

рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХреЗрдВ рдРрд╕реЗ рддрд░реАрдХреЗ рджреЗрддреА рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ PRNGs рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ IIDU [0,1) рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП
рддреНрд░реБрдЯрд┐ [реиреж,,, реи, резрем, резрел]ред рд╣рдо рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдзрд╛рд░рдгрд╛ рдЧрд▓рдд рд╣реИ
MATLAB рд╕рд╣рд┐рдд рдХрдИ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо,
рдкрд╛рдпрдерди рдХрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЙрдбреНрдпреВрд▓, рдЖрд░, рдПрд╕рдкреАрдПрд╕рдПрд╕ рдФрд░ рд╕реНрдЯрд╛рдЯрд╛ред

FWIW, @lemire рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреЗрдкрд░ https://arxiv.org/abs/1805.10941 рд╣реИ
https://github.com/lemire рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдПрдХ рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдкрд░
рдкрдХреНрд╖рдкрд╛рдд рдХреЗ рдмрд┐рдирд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреБрдЫ рдХреЛ рддрд▓рд╛рд╢рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдВрдкрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛
рдореЗрд░реЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ рднреА рдорд╛рдирдХ
http://www.pcg-random.org/posts/bounded-rands.html (рдЬрдм
64-рдмрд┐рдЯ, рд▓реЗрдорд╛рдпрд░ рдХреА рд╡рд┐рдзрд┐ рдзреАрдореА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 128-рдмрд┐рдЯ рдЧреБрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ
64-рдмрд┐рдЯ рдбрд┐рд╡реАрдЬрди, рд╕рднреА рдкрд░рд┐рдЪрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ MSVC рдХреЗ рд▓рд┐рдП рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЙрдиред)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=ABKTSRKNAQAK4WIXG5SVLO3PX3P5XV3X5PNFM4HPX3CHPY3CHWYVOQHULVOH52H8H5&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABKTSRKV3KYKRLNMBKNU4JLPXQUA3ANCNFSM4HPX3CHA
ред

рд╣рдореЗрдВ _safe_ рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рднреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреВрдХ рд╣реИ

рдЗрд╕рд╕реЗ рдмрд╣рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд░реНрдз-рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рд╣реИред рдЕрдм рддрдХ рдореИрдВрдиреЗ рдХрд┐рд╕реА рдХреЛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реБрдП рдирд╣реАрдВ рджреЗрдЦрд╛, рди рд╣реА рдпрд╣рд╛рдВ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ, рдкреАрдЖрд░ рдпрд╛ рдереНрд░реЗрдбреНрд╕ рдореЗрдВред рдмрд╕ рдЕрдореВрд░реНрдд рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ PCG64 рдПрдХ рдЕрдЪреНрдЫрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ред рдПрдирд╛рдХреЛрдВрдбрд╛ рдПрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЧрддрд┐ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрд▓ред, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рддрдп рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдореЗрдВ рдирдИ рдмрд╛рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╕рдиреЗ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛рдПрдБ рдПрдХ рд╡рд╛рдВрдЫрдиреАрдп рд╕рдВрдкрддреНрддрд┐ рд╣реИред

рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рддрд╣рдд PCG64 рд╕реНрдкреАрдб рдкреЗрдирд▓реНрдЯреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдорд┐рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдХрд╣реАрдВ рдзреНрдпрд╛рди рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдЧрддрд┐ рдХрд╛ рдорд╛рдорд▓рд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?

рддрд░реНрдХ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ: "рддреЗрдЬ рдХреНрдпрд╛ рд╣реИ"? рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдбрд╝рдЪрди рдХреЗ рд░реВрдк рдореЗрдВ BitGenerator рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдореИрдВ BitGenerator рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рджреЛрдЧреБрдирд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреА рдкреВрд░реНрдг рдЧрдгрдирд╛ рдореЗрдВ 5% рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА? рд╢рд╛рдпрдж рд╡рд╣ рднреА рдирд╣реАрдВред рдкрд╛рдпрдерди-рдиреЙрдЯ-рдПрдЬрд╝-рдП-рдлрд╛рд╕реНрдЯ-рдП-рд╕реА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ PRNG- рднрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рд╡реЗ BitGenerator рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╡рддрдГ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рддрд╣рдд PCG64 рд╕реНрдкреАрдб рдкреЗрдирд▓реНрдЯреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдорд┐рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рдЕрдк-рдереНрд░реЗрдб рдореИрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ clang PCG64 рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо 64-рдмрд┐рдЯ MSVC рдХреЗ рд▓рд┐рдП рдЪреБрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ 64-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ MSVC рдПрдХ рдЕрдЪреВрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ PCG64 рдЯреНрд░рд┐рдХ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ MSVC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 32-рдмрд┐рдЯ ISA рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИред

рдХреНрдпрд╛ @Kellie рдУрдЯреЛрдмреЛрдиреА [email protected] рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИ
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдорд╛рдореВрд▓реА рдЖрдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдПрдордЯреА рдХрд╛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рд▓рдЧрднрдЧ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ
рд╡рд░реНрджреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди (n <2100) рдпрд╛ рд╡рд░реНрджреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдиреЗ (n = 4e8, k = 1000)ред

рдЬреЛ рдХрд┐ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реЗ рд▓реЗрдХрд░ рдПрдордПрдорд╕реАрдПрдорд╕реА рдХреЗ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рддрдХ рд╕рдм рдХреБрдЫ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрдЪреНрдЫрд┐рдд рд╡рд┐рддрд░рдг рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░
рд╡рд┐рддрд░рдг рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреБрд▓ рднрд┐рдиреНрдирддрд╛ рджреВрд░реА
2)ред рдпрд╣ рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЧрдВрднреАрд░ рд╣реИред

рд╣рдордиреЗ рдПрдордЯреА рдХреЛ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп" рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рддреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ
рджреЛ рддреАрди рд╕рд╛рд▓ред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рддрд░реАрдХрд╛ рд╣реИ
(рдЪреВрдВрдХрд┐ рд╡рд┐рддрд░рдг рджреВрд░реА рдЗрддрдиреА рдмрдбрд╝реА рд╣реИ)ред

рдЪреАрдпрд░реНрд╕,
рдлрд┐рд▓рд┐рдк

рд╕реЛрдо, 27 рдордИ, 2019 рдХреЛ рджреЛрдкрд╣рд░ 12:26 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдХрд░реНрдиреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдЧрддрд┐ рдХрд╛ рдорд╛рдорд▓рд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?

рддрд░реНрдХ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ: "рддреЗрдЬ рдХреНрдпрд╛ рд╣реИ"? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдмрд┐рдЯрдЧрдирд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрддрд╛ рд╣реИ
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдбрд╝рдЪрдиред рдЕрдЧрд░ рдореИрдВ рдПрдХ рдмрд┐рдЯрдЧреИрдиреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рджреЛ рдмрд╛рд░ рддреЗрдЬ рд╣реИ,
рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреА рдкреВрд░реНрдг рдЧрдгрдирд╛ рдореЗрдВ 5% рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА? рд╢рд╛рдпрдж рд╡рд╣ рднреА рдирд╣реАрдВред
рдкрд╛рдпрдерди-рдиреЙрдЯ-рдПрдЬрд╝-рдП-рдлрд╛рд╕реНрдЯ-рдП-рд╕реА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рднреА рд╣реИ
PRNG- рднрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рдХреА рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
BitGenerator рдореЗрдВ рд╕рдордпред рд╕рдВрднрд╡рддрдГ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ
рдкрд░реНрдпрд╛рдкреНрддред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWKSMPAG3GFUCUFRXCDPXQYY5CNNMM4HPX3CHKY3NVWKWH52&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWIDCPAJJ6DJ3RO332LPXQYVRANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

@pbstark рдореИрдВ рдЬреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдХреГрддреНрд░рд┐рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ) рдЬрд┐рд╕рд╕реЗ рдПрдордЯреА рдпрд╛ 128-рдмрд┐рдЯ PRNG рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ cryptorandom рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд░реЗрдЬрд╝рдореИрдкреНрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ 128-рдмрд┐рдЯ PRNG рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдЗрдВрдлрд╝реЗрдХреНрд╢рди рджреЗрддреА рд╣реИ рдФрд░ cryptorandom рд╕рд╛рде рд╕рд╣реА рдЗрдВрдлрд╝реЗрдХреНрд╢рди рджреЗрддреА рд╣реИ?

PCG64 рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рд╣реЛрддрд╛ рд╣реИ,
рдЪреВрдВрдХрд┐ рдЗрд╕рдХрд╛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди MT рд╕реЗ рднреА рдЫреЛрдЯрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рдерд╛
рдЕрднреА рднреА "рдмреЗрд╣рддрд░" рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдкрд╕рдореВрд╣ рдХрд╛ рдирдореВрдирд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ
рдПрдордЯреА рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХреНрд░рдордЪрдп рд╕рдореВрд╣ред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЬрд╛рдирд╛ рд╣реИ
500 10 рдЪреБрдиреЗрдВ, рдФрд░ 21 рд╕реЗ рдкрд╣рд▓реЗ!ред

рдЪреАрдпрд░реНрд╕,
рдлрд┐рд▓рд┐рдк

рд╕реЛрдо, 27 рдордИ, 2019 рдХреЛ рджреЛрдкрд╣рд░ 12:30 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдХрд░реНрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @ithub.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рддрд╣рдд PCG64 рд╕реНрдкреАрдб рдкреЗрдирд▓реНрдЯреА рд╣реИ
рдРрд╕рд╛ рдХреБрдЫ рдЬрд┐рд╕реЗ рдорд┐рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред

рдЕрдк-рдереНрд░реЗрдб рдореИрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрд▓реИрдВрдЧ рдиреЗ рдкреАрд╕реАрдЬреА 64 рдХреЛ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЪреЛрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
64-рдмрд┐рдЯ MSVC рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ 64-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ MSVC рдПрдХ рд╣реИ
рджреБрд░реНрдЧрдо рд╕рдорд╕реНрдпрд╛ред

рдХреНрдпрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ PCG64 рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рд╣реИ
рд╡рд┐рдВрдбреЛрдЬ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрдо рд╣реИ
MSVC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 32-рдмрд┐рдЯ ISA рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWJFCINQCYGFCI7ULI3PXLZGLA5CNFSM4HPX3CHKYYPPNPLEW8H8H8648648######### ред
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWK6QTB65Z4TJU76XKTPXQZGLANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рддреМрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PRNGs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдкрд╣рд▓реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдпрджрд┐ рдЬрд╡рд╛рдм рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ)ред рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддреА рд╣реИ рд╡рд╣ рд╣реИ рдЕрдм рдХреЗ-рдЖрдпрд╛рдореА рд╕рдореАрдХрд░рдгред рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо PCG рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ MT рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВ? (рдиреЙрдирд▓рд╛рдЗрдирд┐рдпрд░ рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рд╕реЗ рдЖрдпрд╛, рдЬреЛ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ PRNGs рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд▓реЛрдХрди рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рдЕрдЧрд▓реЗ 2 рджрд┐рдиреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ ...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХрдИ рд╡рд┐рдВрдбреЛрдЬ 32-рдмрд┐рдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ 64-рдмрд┐рдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ - рдЧрдгрд┐рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - рдХрд┐ рдХрдИ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП,
рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рддрдХ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдПрд╣рддрд┐рдпрд╛рддреА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЬрдм рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реЗ рд╣реИрдВ
рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдП (CS-PRNGs), рд╣рдо рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрдо рд╕рддрд░реНрдХ рд░рд╣рдиреЗ рджреЗрдВред

рд╕реЛрдо, 27 рдордИ, 2019 рдХреЛ рджреЛрдкрд╣рд░ 12:39 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдХрд░реНрдиреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@pbstark https://github.com/pbstark рдореИрдВ рдЬреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рд╡рд╣ рдПрдХ рдареЛрд╕ рд╣реИ
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдХреГрддреНрд░рд┐рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ)
рдПрдордЯреА рдпрд╛ рдПрдХ 128-рдмрд┐рдЯ PRNG рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝реА рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк
рдПрдХ рдХреИрдордХреЙрд░реНрдбрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд░реЗрдЬрд╝рдореИрдкреНрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЧрд▓рдд рд╣реИ
128-рдмрд┐рдЯ PRNG рдХреЗ рд╕рд╛рде рдЗрдВрдлрд╝реЙрд░реНрдореЗрдВрд╕ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдЗрдВрдлрд╝реЗрдХреНрд╢рди?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWODTUIPNMMOOJB6QP3BQP3QQ2FPA5CNFM4HPX3CHKYY3H3H3H3H3H3H3H3&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWITAGQFZDQSIFNEHETPXQ2FPANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

k-equidistribution PRNG рдЖрдЙрдЯрдкреБрдЯ рдХреА рдПрдХ рд╕рдореНрдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рд╣реИ
PRNG рдХреА рдЕрд╡рдзрд┐ред рдпрд╣ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░, рдЬреИрд╕реЗ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕реАрд░рд┐рдпрд▓ рд╕рд╣рд╕рдВрдмрдВрдзред
рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдмрд╛рд░ рд╣реИред

рд╕реЛрдо, 27 рдордИ, 2019 рдХреЛ рджреЛрдкрд╣рд░ 12:48 рдмрдЬреЗ рд╕реЗрдмреЗрд╕реНрдЯрд┐рдпрди рдмрд░реНрдЧ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рддреМрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PRNGs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдореИрдВ рдмрд╕ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдЙрддреНрддрд░ рд╡рд╣ рд╣реИ
рд╡реЗ рд╕рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдареАрдХ рд╣реИрдВ)ред рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдм рд╣реИ
k- рдЖрдпрд╛рдореА рд╕рдВрддреБрд▓рдиред рдХреНрдпрд╛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ PCG рдХрд╣рдиреЗ рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
MT рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рд╣реИ? (Nonlinear рдЧрддрд┐рд╢реАрд▓рддрд╛ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ, рдХрд┐
рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ PRNGs рдФрд░ I рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд▓реЛрдХрди рдирд╣реАрдВ рд╣реИ
рдЕрдЧрд▓реЗ 2 рджрд┐рдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ ...

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWPOBTPYHC3XBINQYA3PXQHHZA5CNFSM4HPX3CHKYY3p8H8H8648648&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWOEB7KR2YJZWHRRAHLPXQ3HZANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

@pbstark MT рдХрдИ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ PCG (рдФрд░ рдЕрдиреНрдп рдЬрдирд░реЗрдЯрд░) рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

@rkern

рдпрджрд┐ рдХреЛрдИ рдПрдордПрд╕рд╡реАрд╕реА рдХреЛ рд░реЛрд░ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ "_rotr64" рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ '/ O2' рдзреНрд╡рдЬ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдкреАрд╕реАрдЬреА 64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

@Pbstark рдХреЗ рд▓рд┐рдП , рдпрд╣рд╛рдБ рдкреАрд╕реАрдЬреА -64 рд╕реЗ рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдПрдХ рдмреАрдЬ рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо рднреА рдмрддрд╛рдКрдВрдЧрд╛, рдпрд╣ 0x559107ab8002ccda3b8daf9dbe4ed480 ):

  64bit: 0x21fdab3336e3627d 0x593e5ada8c20b97e 0x4c6dce7b21370ffc
     0xe78feafb1a3e4536 0x35a7d7bed633b42f 0x70147a46c2a396a0
  Coins: TTTHHTTTHHTHTTTTHTHHTTTTTHTTHHTTHHTHHTHHHHHHHHTTHHTTHHTHHHHHTHTHH
  Rolls: 5 3 5 2 5 3 1 6 6 5 4 4 5 5 5 6 2 3 5 3 2 3 2 5 6 2 4 6 2 3 4 6 3
  Cards: 5h 3h 3c 8d 9h 7s Kh Ah 5d Kc Tc 6h 7h 8s Ac 5c Ad Td 8c Qd 2h As
     8h 2d 3s 5s 4d 6d 2s Jd 3d 4h Ks 6s Qc Js Th 9d 9c Ts Jh 4c 2c 9s
     6c 4s 7c 7d Jc Qs Kd Qh

рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рдФрд░ рдкреАрд╕реАрдЬреА рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдиреЗ рд╣реБрдП рдмреАрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓реЛ 0xb124fedbf31ce435ff0151f8a07496d3 рддрд░реНрдХ рдХреЗ рд▓рд┐рдП,

рддреЛ PCG-64 рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдХреНрд░рдо рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдБ рд╣реИ, рд▓реЗрдХрд┐рди, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рди рдмрддрд╛рдКрдВ рдХрд┐ рдореБрдЭреЗ рдХрд╣рд╛рдБ рджреЗрдЦрдирд╛ рд╣реИред (рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реЛрдВрдЧреА рдпрджрд┐ рд╣рдо рдзрд╛рд░рд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред)

рдирд┐рдпрдорд┐рдд PCG рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдкреНрд▓реЗ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХрд╛ рд╢реВрдиреНрдп рдореМрдХрд╛ рд╣реИ; рдкреАрд╕реАрдЬреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреАрдврд╝реА рдпреЛрдЬрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдкреНрд▓реЗ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдПрдХ рдЧреИрд░-рдЕрдВрддрд░реНрд╡рд┐рд░реЛрдзреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЗрддрдиреА рдЕрд╕реАрдо рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рднреА рд╣реИред рдореЗрд░реА рдирдЬрд░ рдореЗрдВ, рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИред

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд PRNGs рдХреЛ k-dimensionally equidistributed рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рди рд╣реА рд╡реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рджреВ рдХреА рдЧреЛрд▓реА рд╣реИрдВ рдЬреЛ PRNG рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рд╕рдВрднрд╡ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдХреНрд╖рдг рдЖрдк PRNG рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдмреАрдЬ рдФрд░ рднрдВрдбрд╛рд░ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдмрд┐рдЯ рд╕реАрдХреНрд╡реЗрдВрд╕ рд╣реИрдВ рдЬреЛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рдорд╛рдг: рдХрдмреВрддрд░-рдЫреЗрдж рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛) рдФрд░ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддрдиреЗ рд╣реА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рдХрд┐ рдЖрдк ' рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реИрд╢ рдлрдВрдХреНрд╢рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рдкрд╣рдЪрд╛рди рдлрд╝рдВрдХреНрд╢рди рдЕрдЧрд░ рдЖрдкрдХрд╛ рдмреАрдЬ рдЗрдирдкреБрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ, PRNG рдирд╣реАрдВ рд╣реИред)

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдореИрдВрдиреЗ aesctr.h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AES рдХрд╛рдЙрдВрдЯрд░ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рдкреЗрдЯрд╛, ns рдкреНрд░рддрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдордп:

+---------------------+--------------+----------+--------------+
|                     |   Xoshiro256 |    PCG64 |   AESCounter |
|---------------------+--------------+----------+--------------+
| 32-bit Unsigned Int |      3.40804 |  3.59984 |      5.2432  |
| Uniform             |      3.71296 |  4.372   |      4.93744 |
| 64-bit Unsigned Int |      3.97516 |  4.55628 |      5.76628 |
| Exponential         |      4.60288 |  5.63736 |      6.72288 |
| Normal              |      8.10372 | 10.1101  |     12.1082  |
+---------------------+--------------+----------+--------------+

рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, @bashtageред

рдХреБрдЫ рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдИрдПрд╕ рдирд┐рд░реНрджреЗрд╢ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрдкреАрдпреВ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ (рдзреАрдорд╛) рдлрд╛рд▓рдмреИрдХ рдкрде рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдм рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдИрдПрд╕ рдХреЛрдб рд▓реВрдк рдЕрдирд░реЛрд▓рд┐рдВрдЧ рд╕реЗ рдЕрдкрдиреА рдЧрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реИред рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА PRNG рдХреЛ рдЧрддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред FWIW, @lemire рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PCG рдХрд╛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП AVX рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рджреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╕реБрдиреНрди рдХреЛ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╛рдп рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ BitGenerator рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЛрдВ рдкрд░ рдПрдХ BitGenerator рдмрдврд╝рд╛рд╡рд╛ рджреЗрдирд╛ рд╣реИред

рдореБрдЭреЗ рдПрдХ "рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ" рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдФрд░ рдЫреБрд░рд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рдЬреЛ рдЙрд╕ рд╕рд╣рдорддрд┐ рд╕реЗ рд╕рд╣рдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рд╕реЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХреЛрдИ рдХрд░реНрд╖рдг рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред

"рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ" рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдерд╛ "рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдбрд┐рдлреЙрд▓реНрдЯ"ред рдЕрднреА рднреА рдРрд╕реЗ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдПрдкреАрдЖрдИ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд Generator рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдирд╛рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ PRNGред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо _d't_ рдореЗрдВ BitGenerator рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реБрдиреНрди рдХреЛ рдиреНрдпреВрдирддрдо рд░рдЦрдиреЗ рдФрд░ scipy рдФрд░ рдЕрдиреНрдп рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЙрди BitGenerator рдХреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ MT19937 RandomState рдФрд░ BitGenerator рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рддрд░реНрдХ рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ Xoshiro256 ред рдЪрд▓реЛ рдмрдирд╛рдиреЗ рдХреЗ Generator.__init__() рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ BitGenerator ред рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдЖрдЗрдП рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ np.random.xoshiro256_gen(seed) рдЬреЛ рдХрд╡рд░ рдХреЗ рддрд╣рдд Generator(Xoshiro256(seed)) рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд Generator рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдХрд░рддреЗ рд╣реИрдВ ред

рдЕрдм рдХреБрдЫ рд░рд┐рд▓реАрдЬ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ PCG64 , ThreeFry , рдЖрджрд┐ рдХреЛ random-tng рдпрд╛ scipy рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдХреЗрдЬ рд╕реЗ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдпрд╛ рдирдИ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЦрд╛рдорд┐рдпрд╛рдВ Xoshiro256 рдореЗрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕реБрдкреА рдХреА рд░рд╛рдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ BitGenerator рд▓реЛрдЧреЛрдВ рдХреЛ PCG64 рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ PCG64 BitGenerator рдХреНрд▓рд╛рд╕ рд╣реИ рдФрд░ np.random.pcg64_gen(seed) рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП np.random.xoshiro256_gen(seed) рдХрд╛ рдПрдХ рдЕрд╡рдореВрд▓реНрдпрди рдЪреЗрддрд╛рд╡рдиреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдм рдкрд╕рдВрджреАрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реИ: рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ np.random.pcg64_gen(seed) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди Xoshiro256 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА, рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Generator(Xoshiro256(seed)) рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ "рдЕрдирд╛рдо" рдПрдкреАрдЖрдИ (рдпрд╛рдиреА Generator(seed) , Generator(DefaultBitGenerator(seed)) , np.random.default_gen(seed) ) рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИрдВред рд╣рдо рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ рдЕрдм рдФрд░ рдкрд╕рдВрджреАрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдЕрдкрдиреА рд░рд╛рдп рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреА рд░рд╛рдп рдХреЛ "рдкрд╕рдВрджреАрджрд╛" рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рдкреБрд░рд╛рдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ)ред рддреБрдо рднреА рдХреЛрдИ рд╕рд┐рджреНрдз рдпрд╛ рджрд░реНрдЬ рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреВрд░реНрдгрддрдо рддрдХ рд╕реАрдорд┐рдд рдХрд░рдХреЗ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ _easiest_ рддрд░реАрдХрд╛ рдмрдирд╛рдиреЗ рд╕реЗ, рд╣рдо рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╕реБрдиреНрди рдХреА рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рд╡рд╣ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ? рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЙрд╕ BitGenerator рд▓рд┐рдП рдареЛрд╕ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрднреА рднреА рдкрд░рд┐рдгрд╛рдореА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХрдИ рд╡рд┐рдВрдбреЛрдЬ 32-рдмрд┐рдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ 64-рдмрд┐рдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред Win32 рдкрд░ PCG64 рд╕рд╛рде рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рд╣реИ (рдФрд░ рдПрдХ рд╣реИ рдХрд┐ рд╣рдо рд╢рд╛рдпрдж рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИ?

рдпрджрд┐ рдХреЛрдИ рдПрдордПрд╕рд╡реАрд╕реА рдХреЛ рд░реЛрд░ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ "_rotr64" рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ '/ O2' рдзреНрд╡рдЬ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж! @imneme рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЗрди рд╕рднреА рднреВрд▓реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ред :-)

@seberg рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреЛрдИ рдкреНрд░рд╢рдВрд╕рд╛ рдкрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ k ред рджреВрд╕рд░реЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ!

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдореИрдВрдиреЗ aesctr.h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдИрдПрд╕ рдХрд╛рдЙрдВрдЯрд░ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рдкреЗрдЯ рджрд┐рдпрд╛

рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ @pbstark рдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛ред AES-CTR рдПрдХ CS-RNG рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА CS-RNG рдореЗрдВ рдмрдбрд╝реА рдЕрд╡рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ) рд╕рднреА рд╕рдВрднрд╡ k! k рд▓рд┐рдП рд╕рднреА рднреБрдЧрддрд╛рдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред рдХрд╛рдЙрдВрдЯрд░ рдЕрднреА рднреА рдПрдХ 128-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдмрд╛рд░ рдпрд╣ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрд╡рдзрд┐ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЪреБрдХреЗ рд╣реИрдВред @pbstark рдмрд╣реБрдд рдмрдбрд╝реА рдЕрд╡рдзрд┐ рдХреЗ PRNGs рдХреА рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ CS-RNG рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдорд╛рдирддрд╛ рдкрд░ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЖрдорддреМрд░ рдкрд░ PRNG рдХреЗ рд╕рдореАрдХрд░рдг рдХреЛ PRNG рдХреЗ рд░рд╛рдЬреНрдп рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдордд рдЕрдзрд┐рдХрддрдо рдХреЗ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЕрдзрд┐рдХрддрдо рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рд╡рд╛рдВрдЫрдиреАрдп рд╕рдВрдкрддреНрддрд┐ рдорд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рджреЛрд╖ рднреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╡рд╣рд╛рдБ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рддреЗ рд╣реБрдП рдХрд╛рдЧрдЬрд╛рдд рд╣реИрдВ)ред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ _k_-рдмрд┐рдЯ PRNG рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ _k_-bit рдЕрдиреБрдХреНрд░рдо рдареАрдХ рдПрдХ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрдиреНрдорджрд┐рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдо 2 ^ (k / 2) рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмрд╛рдж рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред ( рдореИрдВрдиреЗ рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЬрдиреНрдорджрд┐рди рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рд╣реИ ред рдЗрд╕рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рджреЛрд╣рд░рд╛рд╡ рдХреА рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЕрдиреБрдкрд╕реНрдерд┐рдд рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, 64-рдмрд┐рдЯ-рдЖрдЙрдЯрдкреБрдЯ 64-рдмрд┐рдЯ PRNG, рдФрд░ Xoroshiro64 +, 32-рдмрд┐рдЯ-рдЖрдЙрдЯрдкреБрдЯ 64-рдмрд┐рдЯ -рд╕реНрдЯреЗрдЯ 2-рдбрд┐рдореИрдиреНрд╕рд▓реА-рдЗрдХреНрд╡рд┐рд╕реНрдЯреАрдЬреЗрдб PRNG, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВред)

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдЬреЛ 64-рдмрд┐рдЯ рджреЛрд╣рд░рд╛рд╡ (рдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ - рд╣рдо рдПрдХ рдкреЙрдЗрд╕рди рд╡рд┐рддрд░рдг рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдПрдХ PRNG рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ _not_ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдЬреЛ рд╣реЛрдЧрд╛ рд╕рднреА 64-рдмрд┐рдЯ рдорд╛рдиреЛрдВ рдХреЗ 36.8% рдХреА рдЪреВрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдореА-рдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рджреЛрд╖ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП _k_ рдмрдбрд╝рд╛ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрдбрд╝реЗ рдФрд░ рдмрдбрд╝реЗ рд░рд╛рдЬреНрдп рдЖрдХрд╛рд░ (рдФрд░ рдЕрд╡рдзрд┐) рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреЛрдбрд╝рд╛ рдЖрдХрд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдПрдХ рдЕрдзрд┐рдХрддрдо рд╕рдорддреБрд▓реНрдп PRNG рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рдирд╛рдХрд╛рдо рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдЧреИрд░-рдЕрдзрд┐рдХрддрдо рд╕рдорддреБрд▓реНрдп PRNG рдХреБрдЫ _k_-рдмрд┐рдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ (рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рд╢рдВрд╕рдиреАрдп рддрд░реАрдХреЗ рд╕реЗ) рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, PRNG рд╣рдо рджреЛрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ - рдЧрдгрд┐рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - рдХрд┐ рдХрдИ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдПрд╣рддрд┐рдпрд╛рддреА рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдП (CS-PRNGs), рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЪреБрдирддреЗ рд╣реИрдВ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрдо рд╕рддрд░реНрдХ рд░рд╣рдиреЗ рджреЗрдВред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рддрд░реНрдХ рдФрд░ рд╕рдмреВрддреЛрдВ рдХреА рдЗрд╕ рдкрдВрдХреНрддрд┐ рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдБред рдЬреИрд╕реЗ, рдореИрдВ рд╕реБрдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рдХрдерди рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╕рдиреНрди рд╣реВрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред рд╡реЗ рдкреНрд░реЗрд░рдХ рд╣реЛрдВрдЧреЗ рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдкрдж рдХреА рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдк рд╕реБрдЭрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд▓реЗрддреЗ рд╣реИрдВред

рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рдорд┐рдд PRNG рд╕рд╣реА RNGs рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрдЧрдгрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдЪреНрдЪреЗ RNG рдХреЗ рдЙрди рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо, рд╣рдордиреЗ рдХрдареЛрд░рддрд╛ рд╕реЗ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд┐рддрдирд╛ рдЖрд░рд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓рдШреБ-рдЪрд┐рддреНрд░рдг рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдмрд╣реБрдд рдХрдо, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпреЗ рдЙрд▓реНрд▓рдВрдШрди рдирд┐рдВрджрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИрдВ, рд╕рднреА-рдпрд╛-рдХреБрдЫ рдирд╣реАрдВ, рдЧреЛ / рдиреЛ-рдЧреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЙрдирдХрд╛ рдкреНрд░рднрд╛рд╡ рдЖрдХрд╛рд░ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ PRNG рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХреБрдЫ k рд▓рд┐рдП рд╕рднреА k! рдкрд░рд┐рддреНрдпрд╛рдЧ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрджрдо рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓рддрд╛ рдПрдХ рдареЛрд╕ рд╕рдВрдЧрдгрдирд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╡рд╣ рдкрд░реАрдХреНрд╖рдг рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реБрдЭрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдо PractRand рдпрд╛ TestU01 рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛ рдореБрдЭреЗ @imneme рдХреЗ PCG рдкреЗрдкрд░ рд╕реЗ рдмрд╣реБрдд рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд▓рдЧреА, рд╡рд╣ рдереА рдкреНрд░рддреНрдпреЗрдХ PRNG рдХреЗ рдХрдИ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рд░рд╛рдЬреНрдп рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рдХрд┐ рд╡реЗ TestU01 рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдБ рд╢реБрд░реВ рд╣реБрдПред рдпрд╣ рдСрд░реНрдбрд┐рдирд░реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдСрд▓-рдСрд▓-рдирдерд┐рдВрдЧ, "рдПрдХреНрд╕ PRNG рдкрд╛рд╕" рдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдХрд┐рддрдирд╛ рд╣реЗрдбрд░реВрдо рд╣реИ (рдЬреЛ рдХреБрдЫ рдирдореВрдиреЛрдВ рдХреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреЗрд╕реНрдЯрдпреВ 01 рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ)ред рдХреНрдпрд╛ рдРрд╕реА рдареЛрд╕ рдЧрдгрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 8-рдмрд┐рдЯ PRNGs рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ? 16-рдмрд┐рдЯ PRNGs? рдлрд┐рд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╣рдореЗрдВ PRNG рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ TestU01 / PractRand рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИред рдФрд░ рд╡рд╣ рд╕реБрдкрд░-рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рджреВрд╕рд░реА рдУрд░, рдЕрдЧрд░ PRRG рд╕реЗ _more_ рдбреЗрдЯрд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░реИрдХреНрдЯреНрд░реЗрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реВрдЯ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ PRNG рдХреА рд╡рд┐рдлрд▓рддрд╛ рдмрд┐рдВрджреБ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрди рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдлрд▓рддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рдореИрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдЪрд┐рдВрддрд╛, рдФрд░ рд╣рдо "рдкрд╛рд╕ рдкреНрд░реИрдХреНрдЯреНрд░реЗрдВрдб" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░реЙрдХреНрд╕реА рдореЗрд░реА рдЧрдгрдирд╛ рдкрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдореЗрд░реЗ рд╣рд╛рде рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рд╕реАрдПрд╕-рдкреАрдЖрд░рдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдкрд╕рдВрдж рдХреЛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдБред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдорд╛рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм 32 рдЖрдЗрдЯрдо, рд╕рднреА 32 рдлреЗрд░рдмрджрд▓! рдлреЗрд░рдмрджрд▓ (рдпрд╛рдиреА, рд╕рднреА 263130836933693530167218012160000000 рдЙрдирдореЗрдВ рд╕реЗ) рдПрдХ PRNG рдХреЗ рдмрдЬрд╛рдп рдЙрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЙрди 32 рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ! рдлреЗрд░рдмрджрд▓, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреА рдорд╛рдВрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ) рдпрд╣ рджрд╛рд╡рд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрд┐рди рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдлреЗрд░рдмрджрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП! рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдорд╛рдВрдЧ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рднреА 32 рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИ! рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдлреЗрд░рдмрджрд▓ - (32)! рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП! рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП 3.8 ├Ч 10 ^ 18 рдПрдХреНрд╕рд╛рдмрд╛рдЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдореЗрдВ рдПрдиреНрдЯреНрд░рд╛рдкреА, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╣реИред

... рд╣рдо рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП np.random.xoshiro256_gen(seed) рдПрдХ рдЕрд╡рдореВрд▓реНрдпрди рдЪреЗрддрд╛рд╡рдиреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдм рдкрд╕рдВрджреАрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реИ: рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдХреЛрдб рдХреЛ np.random.pcg64_gen(seed) рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ Xoshiro256 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Generator(Xoshiro256(seed)) рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдпрд╣ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рдВрдЪрд┐рдд рдФрд░ рдЕрдЬреАрдм-рдЕрдЬреАрдм рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдирдИрдкреА рдХрд╣рддрд╛ рд╣реИ: рджреВрд╕рд░реА, рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрд╛рд░рд╛-рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рд╣реИ, рддреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдФрд░ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯ-рдлреЙрд░-рдмрд┐рдЯ рдмрд┐рдЯрдХреЙрдЗрдирдмрд┐рд▓рд┐рдЯреА рдХреЛ рддреЛрдбрд╝рдирд╛, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк imho рд╣реИ (рдФрд░ рдПрдХ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рдереЗ)ред

"рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ" рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдерд╛ "рдиреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдбрд┐рдлреЙрд▓реНрдЯ"ред

рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк _want_ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PRNG рдХрд╛ рдирд╛рдо рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦреЗрдВред рдЙрдиреНрд╣реЗрдВ np.random.rand & co рд╕реЗ np.random.RandomState() рдФрд░ рдлрд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдЕрдм рд╣рдо рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░рдгрд╛рд▓реА рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ np.random.xoshiro256_gen() ? рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдкреНрд░рддрд┐рдЧрдорди рдкреНрд░рдпреЛрдЬреНрдп-рд╡рд╛рд░ рд╣реЛрдЧрд╛ред

рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк _want_ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PRNG рдХрд╛ рдирд╛рдо рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдпрд╣ default_generator(seed) " @shoyer рдХрд╛ version рддрд░реНрдХ)ред

рдзрд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ (рдЬреЛ рдПрдирдИрдкреА 19 рдбрд┐рд╕реНрдХреНрд▓рд┐рдореНрд╕ рд╣реИ) рдПрдкреАрдЖрдИ рдмреНрд░реЗрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрдорд┐рдХ рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ BitGenerator s рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рднрд╛рд╡реА API рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирдХреЗ рдлреАрдЪрд░-рд╕реЗрдЯреНрд╕ (рд╕реЗрд▓реЗрдмрд▓, рдЬрдВрдкрд╣реЗрдб, рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ PRNG рдХрд┐рддрдирд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдпреЛрдЧреНрдп рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ PRNG рдЪрдпрди рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ (рдпрд╛рдиреА рдЕрдм рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ рдпрд╛ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ), рди рдХреЗрд╡рд▓ рдмрд╛рд╣рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ PCG64 рдЪреБрдирддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ резреи It-рдмрд┐рдЯ рд░рд╛рдЬреНрдп, реи ^ резреи sett рдмрд╕рдиреЗ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛рдПрдБ, рдФрд░ рдФрдЬрд╛рд░ рдЬрдореНрдкрд╣реЗрдб рд╣реИрдВ; рдЕрдЪреНрдЫрд╛ рдФрд░ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ред рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧ default_generator(seed, stream=whatever) рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдореЗрдВ рдХреБрдЫ рдкреНрд░рдореБрдЦ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рджреЛрд╖ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ PRNG рдЬрд┐рд╕реЗ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП = = 128-рдмрд┐рдЯ рд╕реНрдерд┐рддрд┐ (рдЖрд╕рд╛рди; рдореИрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рднреА рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛), рдЬрдореНрдкрд╣реЗрдб (рд╣рд╛рд░реНрдб!),> = 2 ^ 127 рдмрд╕рдиреЗ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛рдПрдБ (рд╣реВ! рд▓рдбрд╝рдХрд╛!), рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рдореЗрдВ default_generator() рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдм рд╢рд╛рдпрдж рд╣рдо рдЙрд╕ рд╢рд╛рдлрд╝реНрдЯ рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

@shoyer рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ BitGenerator рд╣рдореЗрд╢рд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреЗрд╡рд▓ рдХрдо рд╕реЗ рдХрдо-рдЖрдо-рднрд╛рдЬрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢реМрдХреАрди рд╣реЛрдВ ред рдЗрд╕рд╕реЗ рдХрд╛рдо рдмрди рдЬрд╛рдПрдЧрд╛! рд▓реЗрдХрд┐рди рдпрд╣ рднреА @charris рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рд░рд╛рдУрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреВрдХ рдЬрд╛рдПрдЧрд╛ред

рдЕрдм рд╣рдо рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░рдгрд╛рд▓реА рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ np.random.xoshiro256_gen() ? рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдкреНрд░рддрд┐рдЧрдорди рдкреНрд░рдпреЛрдЬреНрдп-рд╡рд╛рд░ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЕрдЬреАрдм-рдЕрдЬреАрдм рдирд╛рдо рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рдореИрддреНрд░реАрдкреВрд░реНрдг, рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреБрд╢ рд╣реЛрдКрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдиреАрддрд┐ рдЕрдиреНрдпрдерд╛ рдПрдХ рд╣реА рд╣реИ (рд╣рдо рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордХрдХреНрд╖ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рд╣рдо рд╢рд╛рдлрд╝реНрдЯ рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдФрд░ version рддрдВрддреНрд░ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рднреА рдореИрдВ рдареАрдХ рд╣реВрдБред

рдореЗрд░рд╛ рдПрдХ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ Generator() рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдПрдХ рдордЬрдмреВрдд рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд▓реЗ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо (рдЬреЗрдирд░реЗрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП) рдкрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ Generator(BitGenerator(kwarg1=1,kwargs2=b,...))

рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдЬреНрдп рддрдХ рдкрд╣реБрдВрдЪ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдХреА рддрд░рд╣ рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рдП - рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреАрдврд╝реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ - рдФрд░ рдПрдХ рдорд╛рдирдХ рдкрджрд╛рд╡рди рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрднреА рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдбреЙрдХреНрд╕ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рдкрд░ рдПрдХ рд╕рднреНрдп рд╣рд┐рдЯ рджрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореИрдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдБ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдирдИ API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╕рдордп рд╕реНрдЯреНрд░реАрдо рдХрдореНрдкреЗрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдХрднреА рднреА рднреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

# 13650 рдореЗрдВ @bashtage рдореИрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ Generator().bit_generator рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реАрдзреА рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде рдирдордХреАрди рдмрдирд╛рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдореЗрдВ state ред рдпрд╣ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрд▓реЗрдЦрди test_pickle рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЕрдЬрдЧрд░ Thread s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред

рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд░реНрдз-рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рд╣реИред рдЕрдм рддрдХ рдореИрдВрдиреЗ рдХрд┐рд╕реА рдХреЛ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реБрдП рдирд╣реАрдВ рджреЗрдЦрд╛, рди рд╣реА рдпрд╣рд╛рдВ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ, рдкреАрдЖрд░ рдпрд╛ рдереНрд░реЗрдбреНрд╕ рдореЗрдВред

рдХреБрдЫ _N_ (512, 1024) рдХреЗ рд▓рд┐рдП "_N_ GiB рдкрд░ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ " рдпрджрд┐ рдЖрдк рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрдЬреНрдЬреНрд╡рд▓-рд░реЗрдЦрд╛ рдкрд╛рд╕ / рдЕрд╕рдлрд▓ рдорд╛рдирджрдВрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдордЯреА рдФрд░ рдЙрд╕рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЛ рдЗрд╕ рдорд╛рдирджрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдордиреЗ рдЗрд╕ рдХрд╛рд░рдг рдкреАрдЖрд░ рд╕реЗ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдЬреЛрд╢реАрд░реЛ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ред

рдпрджрд┐ рдЖрдк рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдХреНрд░рдорд┐рдХ рд░реИрдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ @imneme рдХреЗ PCG рдкреЗрдкрд░ рдХреА рдзрд╛рд░рд╛ 3 рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрдо-рд░рд╛рдЬреНрдп рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ "рд╣реЗрдбрд░реВрдо" рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╣реИред рдпрд╣ рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд░ рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдкреНрдЯреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд░рд╣реА рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдХреЛ "рдЯреВрдЯреА рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА" рдХреА рдЖрдзрд╛рд░рднреВрдд рдХрд╕реМрдЯреА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рджрд╛рд╡реЗрджрд╛рд░реЛрдВ рдХреЛ рд░реИрдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡реЗ рджрд╛рд╡реЗрджрд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрдо-рд░рд╛рдЙрдВрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рдХрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ N-1 рдореЗрдВ рдПрдХ N- рд░рд╛рдЙрдВрдб рдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмрд╣реБрдд рдХрдо рд╣реЗрдбрд░реВрдо рд╣реИ, рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд░ рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдмрдЪреЗрдВрдЧреЗред рдЗрд╕реА рддрд░рд╣, рдЕрдЧрд░ рдПрдХ 128-рдмрд┐рдЯ BitGenerator рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ 120-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмрд╣реБрдд рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИред

@ рдордЯреНрдЯреАрдк рд╡рд╛рдЬрд┐рдм рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдХрд╣реАрдВ

import gc
state = [o for o in gc.get_objects() if 'Xoshiro256' in str(o)][0].state

рдЕрдЧрд░ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЧрд╣рд░рд╛рдИ рд╕реЗ, рдпрд╣ рдареАрдХ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдЧреИрд░-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдпрд╣ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрд▓реЗрдЦрди test_pickle рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЕрдЬрдЧрд░ Thread s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдореБрджреНрджрд╛ рд╣реИ (# 9650) - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ Generator() рдмрдЪреНрдЪреЗ рдХреЗ рдереНрд░реЗрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗред IIRC рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди> = 3.7 рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ

рдореЗрд░рд╛ рдПрдХ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ Generator() рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдПрдХ рдордЬрдмреВрдд рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд▓реЗ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо (рдЬреЗрдирд░реЗрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП) рдкрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ Generator(BitGenerator(kwarg1=1,kwargs2=b,...))

рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдпрддрд╛ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╣реА рдмреАрдЬ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред рд╣рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рджреВрд╕рд░реЗ рдХреЛ рдЦрд╕рдЦрд╕ тАЛтАЛрдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕рдЦреНрдд рдЕрд░реНрде рдореЗрдВред

рддрд░реНрдХ-рдХрдо- Generator() , рдпрд╛рдиреА "рдореБрдЭреЗ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ PRNG рджреЗрдВ рдХрд┐ рд╕реБрдиреНрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдВ" рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред "рдореБрдЭреЗ PRNG рджреАрдЬрд┐рдП рдЬреЛ _this_ рдмреАрдЬ рдХреЗ рд╕рд╛рде рд╕реБрдиреНрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ", рдФрд░ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдЕрдВрдХреБрд░рд┐рдд PRNG рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрдирдд рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред I _like_ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд╛рдордХрд░рдг (рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди @rgommers рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрджрдо рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрд╕рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред

рддрд░реНрдХ-рдХрдо рдЬреЗрдирд░реЗрдЯрд░ (), рдпрд╛рдиреА "рдореБрдЭреЗ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рджреЗрдВ рдЬреЛ рдХрд┐ рдЦрд╕реНрддрд╛ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ" рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред "рдореБрдЭреЗ PRNG рджреЗрдВ рдЬреЛ рдЗрд╕ рдмреАрдЬ рдХреЗ рд╕рд╛рде рд╕реБрдиреНрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ", рдФрд░ рд╡рд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдЕрдВрдХреБрд░рд┐рдд PRNG рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрдирдд рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдореБрдЭреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд╛рдордХрд░рдг рдкрд╕рдВрдж рд╣реИ (рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди @rgommers рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрджрдо рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрд╕рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреЗ рдмреАрдЬ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдорд╛рд░ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рддрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Mersenne Twister рдХреЛ рдмреАрдЬ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдпрд╣ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ - рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 624 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ (19937 рдмрд┐рдЯреНрд╕ рд░рд╛рдЬреНрдп рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдирд╣реАрдВ рдЦрд┐рд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ PRNG рдмрдирд╛рдирд╛ рд╣реИ (рдмреАрдЬ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЛрдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдЪрд╛рд░ рдХрд░реЗрдВред

рдпрджрд┐ рдЪрд░реНрдЪрд╛ рдХреЗрд╡рд▓ рд╕рд╣реА рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реВрдВ
Generator(BitGenerator(**kwargs)) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
semiaware рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Generator() рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ
рдорд╛рдирд╛ рдЧрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ
рдмреАрдЬ рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рд┐рдлрд╛рд░рд┐рд╢ред

рдмрд╕ рдПрдХ рдФрд░ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ Generator.seeded(seed[, bit_generator]) where bit generator is a string. This would allow the pattern of switching from one value to None to warn if the default was going to change, like lstsq. I would also only support a limited pallatte of but generators initially (i.e. 1). Doesn't make it easy to expose advanced features I suppose. In a perfect world it would use kwarg only to allow any keyword argument to be used which avoids most depreciation problems. Of course, this doesn't really need to be a class function, just рд╕реАрдбреЗрдб `ред

Tue рдкрд░, 28 рдордИ, 2019, 16:38 рд░реЙрдмрд░реНрдЯ рдХрд░реНрди рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

"рдбрд┐рдлреЙрд▓реНрдЯ" рдкрд░ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рд╕реНрддрд╛рд░, рддрд╛рдХрд┐ рдЬреЗрдирд░реЗрдЯрд░ () рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗред рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдкрд╛рд░реНрд▓реЗ рдХрд░реВрдВрдЧрд╛
рдордЬрдмреВрдд рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрд╢рд╛ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ
(рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рддрдХ) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
рдЬреЗрдирд░реЗрдЯрд░ (BitGenerator (kwarg1 = 1, kwargs2 = рдЦ, ...))

рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдпрддрд╛ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╣реИ
рдореИрдВ рдПрдХ рд╣реА рдмреАрдЬ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред
рд╣рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рдкрд╛рд░ рдкреНрд░рдЬрдирди рд╣реИ
рд╕реБрдиреНрди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕рдмрд╕реЗ рд╕рдЦреНрдд рдЕрд░реНрдереЛрдВ рдореЗрдВред

рддрд░реНрдХ-рдХрдо рдЬреЗрдирд░реЗрдЯрд░ (), "рдореБрдЭреЗ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рджреЗ
numpy рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ "рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рд╕рд╣рдпреЛрдЧред "рдореБрдЭреЗ PRNG рджреЗрдВ рдЬреЛ рдЗрд╕ рдмреАрдЬ рдХреЗ рд╕рд╛рде рд╕реБрдиреНрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ",
рдФрд░ рд╣рдо рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рд╕реБрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЪрд╛рд╣рд┐рдП
рдПрдХ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ (рдпрд╛ рдлрд┐рд░ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд╛рдордХрд░рдг (рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди
@rgommers https://github.com/rgommers рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрджрдо рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░
рдореБрдЭреЗ рдЙрд╕рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=ABKTSRKA4SSNW6XZEVFUMCDPXVW5W5A5CNFSM4HPX3CHKYYPPWW8H8H8646648&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABKTSROCMLHG6E6BLWI6TWDPXVGW5ANCNFSM4HPX3CHA
ред

Tue рдкрд░, 28 рдордИ, 2019, 16:38 рд░реЙрдмрд░реНрдЯ рдХрд░реНрди рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

"рдбрд┐рдлреЙрд▓реНрдЯ" рдкрд░ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рд╕реНрддрд╛рд░, рддрд╛рдХрд┐ рдЬреЗрдирд░реЗрдЯрд░ () рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗред рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдкрд╛рд░реНрд▓реЗ рдХрд░реВрдВрдЧрд╛
рдордЬрдмреВрдд рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрд╢рд╛ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ
(рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рддрдХ) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ
рдЬреЗрдирд░реЗрдЯрд░ (BitGenerator (kwarg1 = 1, kwargs2 = рдЦ, ...))

рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдпрддрд╛ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╣реИ
рдореИрдВ рдПрдХ рд╣реА рдмреАрдЬ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред
рд╣рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рдкрд╛рд░ рдкреНрд░рдЬрдирди рд╣реИ
рд╕реБрдиреНрди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕рдмрд╕реЗ рд╕рдЦреНрдд рдЕрд░реНрдереЛрдВ рдореЗрдВред

рддрд░реНрдХ-рдХрдо рдЬреЗрдирд░реЗрдЯрд░ (), "рдореБрдЭреЗ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рджреЗ
numpy рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ "рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рд╕рд╣рдпреЛрдЧред "рдореБрдЭреЗ PRNG рджреЗрдВ рдЬреЛ рдЗрд╕ рдмреАрдЬ рдХреЗ рд╕рд╛рде рд╕реБрдиреНрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ",
рдФрд░ рд╣рдо рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рд╕реБрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЪрд╛рд╣рд┐рдП
рдПрдХ рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд PRNG рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ (рдпрд╛ рдлрд┐рд░ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд╛рдордХрд░рдг (рдпрджреНрдпрдкрд┐ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рд▓реЗрдХрд┐рди
@rgommers https://github.com/rgommers рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХрджрдо рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░
рдореБрдЭреЗ рдЙрд╕рд╕реЗ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=ABKTSRKA4SSNW6XZEVFUMCDPXVW5W5A5CNFSM4HPX3CHKYYPPWW8H8H8646648&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABKTSROCMLHG6E6BLWI6TWDPXVGW5ANCNFSM4HPX3CHA
ред

рдкреНрд░рдпреЛрдЬреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Generator(seed) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╕ RandomState рд╕рд╛рде рдЫрдбрд╝реА рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рд╡рд░реНрдЬрд╝рдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП Generator , рд╣рдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ bit_version=1 рдХреЗ рдмрдЬрд╛рдп version=1 , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рднреА рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ version рд╡рд┐рдЪрд╛рд░ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдмрд╛рд░ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рдЬрдирд░реЗрдЯрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирдП, рд╕рд╛рдорд╛рдиреНрдп BitGenerator APIs рд╣реЛрдВрдЧреЗред рдЗрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ DefaultBitGenerator рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирдИ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЯреНрд░реЗрдбрдСрдлрд╝, рдЬреИрд╕реЗ, ParallelBitGenerator ред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЖрд░рдПрдирдЬреА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпреЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЗрд╡рд▓ рдЙрди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢реЛрд░ рдордЪрд╛рдПрдЧреА, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЬреЗрдирд░реЗрдЯрд░ рдореЗрдВ рдЕрдкрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрдирд╛рдпрд╛рд╕ рдмрджрд▓рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдореЗрдВ seed рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рд░реИрдВрдбрдорд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

рдпрд╣ рдареАрдХ рд╣реИ, рд╡реЗ рд╢реБрд░реБрдЖрддреА рдЕрдкрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдиреНрдпреВрдирддрдо рд╕рдВрднрд╡ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХрдард┐рди (рд╢рд╛рдпрдж рдмрд╣реБрдд рдХрдард┐рди?) рдзрдХреНрдХрд╛ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдкреАрдЖрдИ рдХреЛ рдЪреМрдбрд╝рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд┐рдХреЛрдбрд╝рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред Generator(Philox()) , Generator(seed(3)) рдФрд░ Generator(bit_version=1) рдмреАрдЪ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рддрдм рддрдХ рджреЗрдЦрдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдирд┐рдХрд▓ рдЬрд╛рддреАред

рдЪрд▓реЛ рдмрд┐рдирд╛ Generator(seed) рд╕рд╛рде рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЪрд▓реЛ рдмрд┐рдирд╛ Generator(seed) рд╕рд╛рде рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреЛрдИ рдЧрдВрднреАрд░ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рднреА рдкреВрд░реНрдг BitGenerator рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ PRNG рдмрдирд╛рдирд╛ рд╣реИ (рдмреАрдЬ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЛрдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдЪрд╛рд░ рдХрд░реЗрдВред

рдореИрдВ рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрдо рдХрд░реНрд╖рдг рдорд┐рд▓рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, "рдареАрдХ рд╣реИ, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдХреБрдЫ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ!"

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдПрдордЯреА рдХреЗ рд╡рд┐рд╢рд╛рд▓ рд░рд╛рдЬреНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд рдиреГрддреНрдп рдХреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдПрдкреАрдЖрдИ рдЙрдкрд▓рдмреНрдз рд╣реЛ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмрд╣реБрдд рдЫреЛрдЯреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ PRNG рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдВрдЧреАред 128-рдмрд┐рдЯреНрд╕ рдПрдХ рдпреВрдпреВрдЖрдИрдбреА рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ, рдЬреЛ рдХрд┐ рд╣реЗрдХреНрд╕ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЫреЛрдЯрд╛ рд╣реИред рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реАрдб рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рд╕реНрдЯреЗрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдЧрд▓реА рдмрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

тЭп python secret_prng.py
Seed: 0x977918d0c7da45e5168f72005586500c
...
Result = 0.7223650399276123

тЭп python secret_prng.py
Seed: 0xe8962534e5fb585483b86119fcb852ce
...
Result = 0.10640984721018876

тЭп python secret_prng.py --seed 0xe8962534e5fb585483b86119fcb852ce
Seed: 0xe8962534e5fb585483b86119fcb852ce
...
Result = 0.10640984721018876

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдкреИрдЯрд░реНрди рд╕рд╛рджрдЧреА рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

NumPy 1.next

class Generator:
    def __init__(bitgen_or_seed=None, *, bit_generator='pcg64', inc=0):

NumPy 1.20.x

`` `рдЕрдЬрдЧрд░
рдХрдХреНрд╖рд╛ рдЬрдирд░реЗрдЯрд░:
def __init __ (bitgen_or_seed = рдХреЛрдИ рдирд╣реАрдВ, *, bit_generator = рдХреЛрдИ рдирд╣реАрдВ, inc рдпрд╛ рдХреЛрдИ рднреА рдирд╣реАрдВ:
рдЕрдЧрд░ bit_generator рдХреЛрдИ рдирд╣реАрдВ рд╣реИ рдпрд╛ inc рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ:
рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рд╣реИ ('рдбрд┐рдлрд╝реЙрд▓реНрдЯ PCG64 рд╕реЗ AESCtr рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдХреАрд╡рд░реНрдб)
'рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдард╛рдПрдВрдЧреЗ', FutureWarning)
`` ``

рдиреНрдпреВрдордкреА 1.22

`` `рдЕрдЬрдЧрд░
рдХрдХреНрд╖рд╛ рдЬрдирд░реЗрдЯрд░:
def __init __ (bitgen_or_seed = none, *, bit_generator = 'aesctr', inc = none, counter = 0):
рдЕрдЧрд░ bit_generator == 'pcg64' рдпрд╛ inc рдХреЛрдИ рдирд╣реАрдВ рд╣реИ:
рдЕрдкрд╡рд╛рдж рдЙрдард╛рдирд╛ ('PCG рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ inc рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ')
`` ``

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдкреИрдЯрд░реНрди рд╕рд╛рджрдЧреА рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдорд╛рдг рджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ https://github.com/numpy/numpy/issues/13635#issuecomment -496589421 рдореЗрдВ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдп рдФрд░ рдирд┐рд░рд╛рд╢рд╛ рдХреА рдмрд╛рдд рд╣реЛрдЧреАред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ BitGenerator рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЯреВрдЯреЗ рд╣реБрдП рд╣реИрдВ, рдЬрд┐рдирдХреА рд╣рдордиреЗ рдЖрд╢рд╛ рдирд╣реАрдВ рдХреА рдереАред

рд╕рдорд╕реНрдпрд╛ рд╕рдВрдХреНрд░рдордг рдХрд╛рд▓ тАЛтАЛрд╣реИред рдЪреВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдЕрдЪрд╛рдирдХ рд╕рдВрдХреНрд░рдордг рдХреА рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рдХреЗ рд╕рд╛рде рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓реЗрдЧреАред рдпрд╛ рдХрдо рд╕реЗ рдХрдо, рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ "рдХрдо рдКрд░реНрдЬрд╛ рд░рд╛рдЬреНрдп" рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд Generator(seed) рдПрдХ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЗ "рдЙрдЪреНрдЪ рдКрд░реНрдЬрд╛ рд░рд╛рдЬреНрдп" рдХреЛ Generator(seed, bit_generator='aesctr') ред рдЪреВрдВрдХрд┐ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ "рдХрдо-рдКрд░реНрдЬрд╛ рд░рд╛рдЬреНрдп" рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╣рдордиреЗ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, IIRC рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рдерд╛ред

рдпрд╣ рдЙрди рд╕рднреА рдЕрдкрдЪрдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ рдЬреЛ рддрд░реНрдХреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЛ рдЬрдЧрд╣ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред Deprecations рдХрд┐ _move_ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдпрд╣реА рдореИрдВ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдЪрд▓реЛ рдмрд┐рдирд╛ Generator(seed) рд╕рд╛рде рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

"рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг" рд╕реЗ, рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рд╕реЗ рд╣реИ? рдпрд╛ рдмрд╕ рдкреАрдЖрд░ рд╡рд┐рд▓рдп рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдЬреЛ рддрдм рд╕реЗ рд╣реБрдЖ рд╣реИ)?

рдпрджрд┐ рдПрдХ рдкреВрд░реНрдг рд╕реБрдиреНрди рд░рд┐рд▓реАрдЬ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреБрдЫ рдЪреАрдЬреЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ BitGenerator s рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдкреВрд░реНрдг рд╡рд░реНрддрдорд╛рди рдкреВрд░рдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред

Deprecations рдХрд┐ _move_ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдпрд╣реА рдореИрдВ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

+1 рд╕рд╣рдордд рд╣реБрдЖ

рдирд╣реАрдВ, рдпрд╣ рдПрдХ "рдирд╛рдорд┐рдд рдЪрд▓рддреА рд▓рдХреНрд╖реНрдп" рдПрдкреАрдЖрдИ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреИрд╕реЗ рдХрд┐ default_generator (рдмреАрдЬ) рдПрдкреАрдЖрдИ рдЬреЛ рд▓реЛрдЧ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗ (рдЬреИрд╕реЗ @shoyer рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ)ред

рдзрд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ (рдЬреЛ рдПрдирдИрдкреА 19 рдбрд┐рд╕реНрдХреНрд▓рд┐рдореНрд╕ рд╣реИ) рдПрдкреАрдЖрдИ рдмреНрд░реЗрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрдорд┐рдХ рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ BitGenerators рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рднрд╛рд╡реА API рд╣реИрдВ

рдЖрд╣ рдареАрдХ рд╣реИ, рдЕрдм рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдпрджрд┐ рдЕрдЬреАрдм-рдЕрдЬреАрдм рдирд╛рдо рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рдореИрддреНрд░реАрдкреВрд░реНрдг, рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреБрд╢ рд╣реЛрдКрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдиреАрддрд┐ рдЕрдиреНрдпрдерд╛ рдПрдХ рд╣реА рд╣реИ (рд╣рдо рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордХрдХреНрд╖ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдд рдирд╛рдо рдЪреБрдирдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдиреНрдп рд╕рдВрдд рдирд╛рдореЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реНрдерд╛рди рд╣реИ - рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдХрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

np.random.generator рдпрд╛ np.random.default_generator ред

рдХрд┐рддрдиреЗ BitGenerators рд╣рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ

рдХреНрдпрд╛ рдЖрдк рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ (MT19937, DSFMT, PCG32, PCG64, Philox, ThreeFry, Xoshiro256, Xoshiro512) рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдордиреЗ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд╛рде рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ: рдХреМрди рд╕рд╛ BitGenerator рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд░реНрддрдорд╛рди рдореЗрдВ Xoshiro256 )

рдЦреИрд░, рдпрд╣ рдореБрджреНрджрд╛ рдЕрдзрд┐рдХ рд╣реИ "рдЬреЛ рдХрд┐ рд╕реБрдиреНрдирдд рдХреЛ BitGenerator рд░реВрдк рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП," рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдкрд╕рдВрдж рдореЗрдВ рдЦрд┐рд▓рд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рдХрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдВрддреНрд░рд┐рдХреА рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдбрд┐рдлреЙрд▓реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рдбрд┐рдлреЙрд▓реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ) рдХреБрдЫ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рд╕рднреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдПрдХ рд╕рд╛рде рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрдбрд╝реА рдмрд╛рд▓реЛрдВ рд╡рд╛рд▓реА рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдФрд░ рд╕рднреА рдХрд╛рдо рдХреЗ рдмрд╛рдж рдЬреЛ рдЖрдкрдиреЗ рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд░рд╡рд╛рд╣рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдФрд░ рдореЗрдЧрд╛-рдереНрд░реЗрдб рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЗрд░реА рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред :-)

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рддрд┐ рд╕реЗрдЧ рдЬрд╛рдирд╛ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреА рд╣реИрдВ: рд╣рдореЗрдВ MT19937 RandomState рдФрд░ рддреБрд▓рдирд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореБрдЭреЗ PCG64 рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рд╣реИред

рдореИрдВрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкрд░ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ 64-рдмрд┐рдЯ MSVC рдХреЗ рд▓рд┐рдП PCG64 рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ uint128_t рдЧрдгрд┐рдд рдХреЗ рдХрд░реАрдм рдЕрд╕реЗрдВрдмрд▓реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ: https: // godbolt .org / z / ZnPd7Z

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _correct _... @bashtage рд╣реИ рдЬреЛ рдЖрдк рдЗрд╕реЗ рд╢реЙрдЯ рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рдкреИрдЪ рдХреЗ рдмрд┐рдирд╛:

Uniforms per second
************************************************************
PCG64            62.77 million

рдкреИрдЪ рдХреЗ рд╕рд╛рде:

Uniforms per second
************************************************************
PCG64           154.50 million

рдкреИрдЪ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП 1000 uint64 рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рдкреИрджрд╛ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЬреАрд╕реАрд╕реА рдореВрд▓ рдФрд░ рддреБрд▓рдирд╛ рдореЛрдб рдореЗрдВ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП:

Time to produce 1,000,000 Uniforms
************************************************************
Linux-64, GCC 7.4                      PCG64            4.18 ms
Linux-64, GCC 7.4, Forced Emulation    PCG64            5.19 ms
Win64                                  PCG64            6.63 ms
Win32                                  PCG64           45.55 ms

рд╡рд╛рд╣, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди msvc2017-on-win-64, 32} рдмрдирд╛рдо gcc7.4-on-linux {64, 32} рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛рддреНрдордХ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк msvc2017 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

Win32 рдпрд╣рд╛рдБ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдирдХреНрд╕ 32 рдмрд┐рдЯ рднреА рдХрд╛рдлреА рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ 32 рдмрд┐рдЯ рдорд╢реАрди рдкрд░ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ (рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЖрдИрдЯреА рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд┐рдВрдбреЛрдЬ)ред рдпрд╣ рдкреНрд░рддрд┐рд╡реЗрджрди рд╕реНрдкрд╖реНрдЯ рд╣реИ: 32 рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП DSFMT (рдпрд╛ MT19937 рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ)ред рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рд░-рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдкреАрд╕реАрдЬреА рджрд╛рд╡реЗ рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рджрд╛рд╡реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧрдВрднреАрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рд╣реИ? (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУ'рдиреАрд▓ рдХрд╛ рдкреЗрдкрд░ рдХреЗрд╡рд▓ "рдЕрд▓рдЧ" рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рджрд╛рд╡реЗ рдХреЗ рдмрд┐рдирд╛ред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╣ рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ: рдХрд┐рд╕реА рджрд┐рдП рдЧрдП LCG рдЧреБрдгрдХ рдХреЗ рд▓рд┐рдП, рдпреЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдПрдБ рдХреЗрд╡рд▓ рд╕реНрдХреЗрд▓рд┐рдВрдЧ [*] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рддреЛ рдПрдХ рд╣реА рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рджреЛ LCG рд╕реНрдЯреНрд░реАрдо рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╕ рдПрдХ рд╕реНрдерд┐рд░ рдорд▓реНрдЯреАрдкрд▓ рд╣реЛрдЧрд╛ (рдореЙрдбреБрд▓реЛ 2**64 рдпрд╛ 2**32 рдЙрдЪрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рдеред рдкреАрд╕реАрдЬреА рдХрд╛ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЫрд┐рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдмрдВрдз рдирд╣реАрдВ рдереЗред

рдЗрддрдиреА рдЕрд▓рдЧ рдзрд╛рд░рд╛рдПрдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдЧрдВрднреАрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдЕрдВрдХрд┐рдд рдореВрд▓реНрдп рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

[*] рдЙрджрд╛рд╣рд░рдг: рдорд╛рди рд▓реАрдЬрд┐рдП x[0], x[1], x[2], ... рдПрдХ рдорд╛рдирдХ 64-рдмрд┐рдЯ LCG рд╕реНрдЯреНрд░реАрдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ x[i+1] := (m*x[i] + a) % 2**64 ред рд╕рднреА i рд▓рд┐рдП y[i] := 3*x[i] % 2**64 рд╕реЗрдЯ рдХрд░реЗрдВред рддрдм y[i] y[i+1] := (m*y[i] + 3*a) % 2**64 рд╕рд╛рде рдПрдХ LCG рд╕реНрдЯреНрд░реАрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдХреЗ, рдЖрдкрдиреЗ рдПрдХ рд╣реА рдЧреБрдгрдХ рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЧрд╛рддреНрдордХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ LCG рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ рд╣реИред 3 рд╕реНрдерд╛рди рдкрд░ рдЕрдиреНрдп рд╡рд┐рд╖рдо рдЧреБрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдФрд░ рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкреВрд░реНрдг-рдЕрд╡рдзрд┐ LCGs рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдФрд░ рдЗрд╕рд▓рд┐рдП a рд╡рд┐рд╖рдо рд╣реИ), рдЖрдкрдХреЛ рд╕рднреА рд╕рдВрднрд╡ рдкреВрд░реНрдг рдорд┐рд▓реЗрдВрдЧреЗ- рдЙрд╕ рдЧреБрдгрдХ рдХреЗ рд╕рд╛рде рдПрд▓рд╕реАрдЬреА рдХреА рдЕрд╡рдзрд┐ред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕рдВрдпреБрдЧреНрдорддрд╛ рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдЧрд▓рдд рдХрдердиред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрд╕реАрдЬреА рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЧрд╣рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣рд╛рдБ рд╣реИ: http://www.pcg-random.org/posts/critiquing-pcg-streams.html

@imneme рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдЕрдВрддрд┐рдо рд╕рд▓рд╛рд╣ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? "рдбреЗрд╡рд┐рдб рдмреНрд▓реИрдХрдореИрди рдХреЗ рд╕рд╛рде рдкрддреНрд░рд╛рдЪрд╛рд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдирд┐рд░рдВрддрд░ рдмреАрдЬ рдФрд░ 1,2,3,4 рдХреА рдзрд╛рд░рд╛рдУрдВ рдЬреИрд╕реЗ рд╕рд╣рд╕рдВрдмрджреНрдз рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде" рдкрд╛рд╕ "рдзрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЕрдм рдореИрдВ рдпрд╣ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдФрд░ рдмреАрдЬ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрди рджреЛрдиреЛрдВ рдХреЛ 1,2,3,4 рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред "

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЕрдЪреНрдЫрд╛ рдмреАрдЬ (рдЬреИрд╕реЗ рдПрдХ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд) рд╣реЛрдирд╛ рдареАрдХ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдИрдбреА 1,8,3,4 рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░реЗрдВ? рдпрд╛ рдмреАрдЬ рдФрд░ рдзрд╛рд░рд╛ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рдПрдиреНрдЯреНрд░реЛрдкреА рд╕реНрд░реЛрдд рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреБрдЫ рд▓рд┐рдирдХреНрд╕ -32 (Ubuntu 18.04 / GCC 7.4) рд╕рдВрдЦреНрдпрд╛

Time to produce 1,000,000 Uniforms
***************************************************************
Linux-64, GCC 7.4                      PCG64            4.18 ms
Linux-64, GCC 7.4, Forced Emulation    PCG64            5.19 ms
Win64                                  PCG64            6.63 ms
Win32                                  PCG64           45.55 ms
Linux-32, GCC 7.4                      PCG64           25.45 ms

рддреЛ рдпрд╣ рд╡рд┐рди -32 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рджреЛрдЧреБрдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдзреАрдорд╛ рд╣реИред рд╕рднреА 4 рдЯрд╛рдЗрдорд┐рдВрдЧ рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдХреА рдЧрдИ рдереА

Other Linux-32/GCC 7.4 Timing Results
-----------------------------------------------------------------
DSFMT            6.99 ms
MT19937         13.09 ms
Xoshiro256      17.28 ms
numpy           15.89 ms

NumPy, NumPy 1.16.4 рд╣реИред DSFMT 32-рдмрд┐рдЯ (x86) рдкрд░ рдЕрдЪреНрдЫреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХрдорд╛рддреНрд░ рдЬреАрдирд┐рдпрд░ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА 32 рдмрд┐рдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред MT19937 32 рдмрд┐рдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП MT19937 рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдиреНрдпреВрдирддрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо PRNGs рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛рдиреА MT19937 рдкреНрд▓рд╕ рд╣рдорд╛рд░реА рдПрдХрд▓-рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд╢рдВрд╕рд╛), рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдПрдХрд▓-рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрдиреБрд╢рдВрд╕рд╛ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 32-рдмрд┐рдЯ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдПрдХ рддреАрд╕рд░рд╛ "рдЕрдиреБрд╢рдВрд╕рд┐рдд-32-рдмрд┐рдЯ" PRNG рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред MT19937 рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд░рд╣реЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реИред рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреИрдХреЗрдЬ рдЕрдзрд┐рдХ рдЖрд▓рд╛ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред

рдмреЗрд╢рдХ, рдЕрдЧрд░ рд╣рдо рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ PRNG рдХреЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд╕реЗрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЙрддреНрд╕реБрдХ рдерд╛ рдХрд┐ рдкреАрд╕реАрдЬреА рдХрд╛ "рдкреА" рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╣рд╕рдВрдмрджреНрдз рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдХрд┐рддрдирд╛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рддреЛ рдпрд╣рд╛рдВ (рд╢рд╛рдпрдж) LCG рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕рдВрднрд╡ рдорд╛рдорд▓рд╛ рд╣реИ: рдЬрд╣рд╛рдВ рдПрдХ LCG рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдПрдбрд┐рдЯрд┐рд╡ рд╕реНрдерд┐рд░рд╛рдВрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдбрд┐рдЯрд┐рд╡ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╕рдЯреАрдХ рдирд┐рд╖реЗрдз рд╣реИред рдлрд┐рд░ рдмреАрдЬ рдХреЗ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рднрдпрд╛рдирдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо LCG рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рджреВрд╕рд░реЗ рдХрд╛ рд╕рдЯреАрдХ рдирд┐рд╖реЗрдз рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдм рдЕрдЧрд░ рд╣рдо рдлреНрд▓реЛрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреАрд╕реАрдЬреА рдХреЗ рджреЛрдиреЛрдВ рдХреНрд░рдордЪрдп рднрд╛рдЧ рдФрд░ рдлреНрд▓реЛрдЯ64 рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рд╣рдореЗрдВ рдереЛрдбрд╝реА рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдПрдХ рдкреНрд▓реЙрдЯ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрд░рдордЪрдп рдХрд┐рддрдирд╛ рдорджрдж рдХрд░рддрд╛ рд╣реИ:

streams

рдпрд╣ рдПрдХ рдРрд╕реА рдзрд╛рд░рд╛ рд╕реЗ 10000 рдХреА рдПрдХ рддрд┐рддрд░ рдмрд┐рддрд░ рд╕рд╛рдЬрд┐рд╢ рд╣реИ, рдЗрд╕рдХреА рдирдХрд╛рд░рд╛рддреНрдордХ рдЬреБрдбрд╝рд╡рд╛рдВ рд╕реЗ 10000 рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИред рднрдпрд╛рдирдХ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдорд╣рд╛рди рдирд╣реАрдВ рднреА: рд╕реНрдкрд╖реНрдЯ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рд╣реИрдВред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдП: рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╡рд┐рдкрд░реАрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХрд┐ рдЖрдк рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдФрд░ рджреЗрдЦрднрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдЕрд╕рдВрдмрджреНрдз рдзрд╛рд░рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рд╣реИ:

import matplotlib.pyplot as plt
import numpy as np

from pcgrandom import PCG64

gen1, gen2 = PCG64(), PCG64()
multiplier, increment, state = gen1._get_core_state()
new_increment, new_state = -increment % 2**128, -state % 2**128
gen2._set_core_state((multiplier, new_increment, new_state))

xs = np.array([gen1.random() for _ in range(10**4)])
ys = np.array([gen2.random() for _ in range(10**4)])
plt.scatter(xs, ys, s=0.1)
plt.show()

PCG64 рдЬрдирд░реЗрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдУ 'рдиреАрд▓ PCG-XSL-RR (PCG рдкреЗрдкрд░ рдХрд╛ рд╕реЗрдХреНрд╢рди 6.3.3) рдХрд╣рддрд╛ рд╣реИред pcgrandom рдкреИрдХреЗрдЬ рдпрд╣рд╛рдБ рд╕реЗ

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдЬрдореНрдкрд╣реЗрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
"рд╕реНрд╡рддрдВрддреНрд░" рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реА-рд╕реАрдбрд┐рдВрдЧ рд╕рд╛рдорд╛рдиреНрдп рдЦрддрд░рдирд╛рдХ рд╣реИред

рдХрд╛рдЙрдВрдЯрд░ / рд╣реИрд╢ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдПрдХ рддреБрдЪреНрдЫ рдХреВрджрд╣реЗрдб () рд╣реИред PCG рдХрд░рддрд╛ рд╣реИ?

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рднреА рдПрдХ рджрд▓реАрд▓: рдХреГрдкрдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдЧреБрдгрд╡рддреНрддрд╛, рдПрдХ рдЕрдирдмрд╛рдЙрдВрдб рд╕реНрдЯреЗрдЯ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рдеред

рдЪреАрдпрд░реНрд╕,
рдлрд┐рд▓рд┐рдк

(EDIT by seberg: рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдИрдореЗрд▓ рдЙрджреНрдзрд░рдг)

@pbstark : рдпрд╣ рд╕рд┐рд░реНрдл reseeding рдирд╣реАрдВ рд╣реИ: рджреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG рдЬрдирд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд▓рдЧ рд╣реИрдВ: x (mx + a (mod 2 ^ 128) рдФрд░ x x mx + b (mod 2 ^ 128) рд╡рд┐рднрд┐рдиреНрди рд╡реЗрддрди рд╡реГрджреНрдзрд┐ a рдФрд░ b рдХреЗ рд▓рд┐рдПред рдУ'рдиреАрд▓ рдХрд╛ рдкреАрд╕реАрдЬреА рдкреЗрдкрд░ рдЙрд╕ рдПрд▓рд╕реАрдЬреА рд╡реГрджреНрдзрд┐ (рдХрд╛рдЧрдЬ рдХреЗ рдЦрдВрдб 4.3.2 рджреЗрдЦреЗрдВ) рдХреЛ рдмрджрд▓рдХрд░ рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмреЗрдЪрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдПрд▓рд╕реАрдЬреА рдХреА рд╕рд╛рджрдЧреА рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬреЛрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░рдВрддрд░ _does_ рд╕рд┐рд░реНрдл рдореВрд▓ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рд░рд╛рд╢рд┐ рд╕реЗ рдЬрдВрдкрд╣реЗрдб рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реИрдЦрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди (рдПрдХ рдирд┐рд░рдВрддрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛, рдпрд╛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрддред

PCG рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдпрд╣ рддрд░реНрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ NumPy рдХреЗ рдирдП рдореБрдЦреНрдп PRNG рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ "рд╕реНрд╡рддрдВрддреНрд░" рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╡рд╛рджреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рдПред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдпреЛрдЧреНрдп рдзрд╛рд░рд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдЬрдореНрдкрд╣реЗрдб рдкреНрд▓рд╕ рдПрдХ рдмреЛрдирд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгрд╛рддреНрдордХ рдпрд╛ рдпреЛрдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд░рд╛рдмрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╣рдордиреЗ рд╕рдореБрджрд╛рдп рдХреЙрд▓ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдПрдХ рдкрд░ рдереЛрдбрд╝реА рдЪрд░реНрдЪрд╛ рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рддрд░реНрдХ рдереЗред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рдЖрд░рдПрдирдЬреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдХрд┐рддрдиреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдиреЛрдЯ рдкрд░: рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдиреЗ рдХреА рдУрд░ рд░реБрдЭрд╛рди (рдХреБрдЫ рдЫреЛрдЯреЗ рдкреНрд░рд▓реЗрдЦрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рдмреЛрдЭ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдХреЗрд╡рд┐рди рдФрд░ рд░реЙрдмрд░реНрдЯ рдЬреЛ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗ рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗред

рдирд╛рдореЛрдВ рдХреЗ рдиреЛрдЯ рдкрд░: рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ RNG рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдирддрд╛, рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдирд╛рдо рдХреЛ рджреЗрдЦрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдмрд╕ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо-рд╕реЗ-рдХрдо рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдмрд┐рдирд╛ рд╕реАрдбрд┐рдВрдЧ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ RNG рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЙрдЬрд╛рдЧрд░ рдПрдкреАрдЖрдИ рдкрд╕рдВрдж рд╣реИред

@mdickinson , рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рд╕реНрд╡рдпрдВ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдХреИрдиреЛрдирд┐рдХрд▓ рд╕реА ++ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

#include "pcg_random.hpp"
#include <iostream>
#include <random>

int main() {
    std::random_device rdev;
    pcg_detail::pcg128_t seed = 0;
    pcg_detail::pcg128_t stream = 0;
    for (int i = 0; i < 4; ++i) {
        seed   <<= 32;           
        seed   |= rdev();
        stream <<= 32;           
        stream |= rdev();
    }
    pcg64 rng1(seed,stream);
    pcg64 rng2(-seed,-stream);
    std::cerr << "RNG1: " << rng1 << "\n";
    std::cerr << "RNG2: " << rng2 << "\n";
    std::cout.precision(17);
    for (int i = 0; i < 10000; ++i) {
        std::cout << rng1()/18446744073709551616.0 << "\t";
        std::cout << rng2()/18446744073709551616.0 << "\n";
    }
}

рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ (рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП):

RNG1: 47026247687942121848144207491837523525 203756742601991611962280963671468648533 41579532896305845786243518008404876432
RNG2: 47026247687942121848144207491837523525 136525624318946851501093643760299562925 52472962479578397910044896975270170620

рдФрд░ рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдХреЛ рдкреНрд▓реЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

corr1

рдпрджрд┐ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

(рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЦрдВрдбрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рд╣рд╕рдВрдмрдВрдз рд╕рдВрднрд╡ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрд▓рдЧ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореЗрд░реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдХрд░рдгред)

@ рдорд┐рдХрд┐рдиреНрд╕рди рдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП , рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА рдФрд░ рд╕реАрдзреЗ рдЗрдВрдЯрд░реНрдирд▓ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреА, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдЪрд░рдг-рдкреНрд░рдЧрддрд┐ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рд▓рд┐рдЯрд┐рд▓ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА, рдЬреЛ рдХрд┐ рдХрдИ рдкреАрд╕реАрдЬреА 32 рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЗрдВрдЯрд░рд▓реЗрдХреНрдЯ рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреА рд╣реИ, рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдореЗрдВ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкрд╛рдпрдерди рдкрд░ master рдЦрддрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред 3. рдЬрдм рдореИрдВ рдкреНрд░рддрд┐рдХреВрд▓ рдЖрдВрддрд░рд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ / рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдореЗрдВ рд╕реАрдзреЗ рдкрдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдкреНрд░рддрд┐рдХреВрд▓ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреВрд▓ _seeds_ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рджрд┐рдирдЪрд░реНрдпрд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ) рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреАрд╕реАрдЬреА рдХреА рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

_Mveryinson рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, _every_ PRNG рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рдЙрдВрдЯрд░-рдЖрдзрд╛рд░рд┐рдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╡рд╛рд▓реЗ рд╕рд╣рд┐рдд рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреЛ рдмреАрдЬ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рдо рдРрд╕реЗ рдмреАрдЬрд╛рд░реЛрдкрдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ PRNG рд╣реЛрдВрдЧреЗ рдЬрд┐рдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рд╣рд╕рдВрдмрджреНрдз рдереЗ (рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ PRNG рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдереЛрдбрд╝реА рджреВрд░реА рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)ред рдФрд░ рдпрджреНрдпрдкрд┐ PRNGs рдЬреЛ рдкреВрд░реНрдг-рд░рд╛рдЬреНрдп рд╕реАрдбрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдкрд░рд┐рдЪрдп рдорд┐рд▓рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рддрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдмрд╕ рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдмреАрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 1,2,3 рдЬреИрд╕реЗ рдЫреЛрдЯреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ _any_ PRNG рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдмреАрдЬрд╛рд░реЛрдкрдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рд░ рдХреЛрдИ рдЗрди рдмреАрдЬреЛрдВ рдХрд╛ рдкрдХреНрд╖ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд░рдо рдХреЛ рдУрд╡рд░рд░рдкреНрд░рд┐рдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред

рд╣рдо рдЗрд╕реЗ рдПрдХ рдзрд╛рд░рд╛ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рдордВрдЧрд▓рдЧреЗрд▓рд┐рдпрд╛ рдиреЗ counter рд╢реЗрд╖ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░, рдПрд▓рд╕реАрдЬреА рдХреА рддрд░рд╣, рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдореЗрдВ рднрд┐рдиреНрдирддрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝рд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рд░рд╛рд╢рд┐ рд╣реЛрддреА рд╣реИрдВред

рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕, PCG рдФрд░ XorWow рдХреА рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо "рд╕реНрдЯреВрдкрд┐рдб" рд╕реНрдЯреНрд░реАрдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдПрдХ рддреБрдЪреНрдЫ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд╛ рдЧрдарди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдореВрд▓реНрдп рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ PRNG рдореЗрдВ 42 рдХреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд░реАрдмреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ 42 рдмрд╛рд░ рдХрдИ рдлрд╕рд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ 42 рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╡рдХреВрдл "рдмрд╕ рдПрдХ рд╡реЗрддрди рд╡реГрджреНрдзрд┐" рдпрд╛ "рд╕рд┐рд░реНрдл рдПрдХ рдПрдХреНрд╕реЛрд░" рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 42 рддрдХ рдЕрдЬреАрдм рджреЛрд╣рд░рд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ; рд╕рднреА рдирдВрдмрд░реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред (рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдореИрдВ рдЬреЛрд╢реАрд░реЛ 256 рдореЗрдВ рдХреНрд▓реЛрдЬ-рд░рд┐рдкреАрдЯ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ

рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рддрд░рдл, рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ рд╡рд╣ рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:
https://cryptography.io/en/latest/ рдкрд╛рдпрдерди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ ?

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреАрдврд╝реА рдкрд░ рдЙрдирдХреЗ рдкреГрд╖реНрда рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рд╣реИ:

рдкрд╛рдпрдерди 3.6 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░рд╣рд╕реНрдп рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рда-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдкреАрдврд╝реА рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░рд╛рдпрдкреЛрдЯрдЧреНрд░рд╛рдлрд┐рдХ рдордЬрдмреВрддреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реЛрдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░рдЦрд░рдЦрд╛рд╡ рдХрд╛ рдмреЛрдЭ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ NumPy рдмрдирд╛рдо рдЙрдкрдпреБрдХреНрдд рдореЗрдВ рдХрд╣реЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдерд╛рдирд┐рдпрд▓ рдиреЗ рдкрд╣рд▓реЗ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд┐рдВрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд dtype рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ / рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рднреА рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдирдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмреЛрдЭ рдХреЗ рдмрд┐рдирд╛ рдПрдкреАрдЖрдИ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рд╡рд┐рдЧреНрдирд╛ рдХреЗ рдкреАрд╕реАрдЬреА рд╕рдорд╛рд▓реЛрдЪрдирд╛ [рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЦрдВрдб ] рдХреЗ рдкреНрд░рддрд┐ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд╕реНрдкрд░ рд╕рдВрдмрдВрдзрд┐рдд PRNG рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рджреЗрдЦрд╛ рд╣реИ, рд╡рд╣ рдкреАрд╕реАрдЬреА рдХреЗ рд╕рд╛рде рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рджреВрд░реА рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдВрддрд░реНрд╡рд░реНрддреА рдмреАрдЬреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЗ рдХрд╛рд░реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдХреЗ рдмрд┐рдирд╛ PRNGs рдореЗрдВ, рд▓реЛрдЧ рдЕрднреА рднреА рдмреАрдЬрд╛рд░реЛрдкрдг рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рд╡реЗ рдмреАрдЬрд╛рд░реЛрдкрдг рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдРрд╕рд╛ рддрдВрддреНрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдкреНрд░рд╕реНрдлреБрдЯрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗред

рдПрдХ рддрд░рдл, рдпрд╣ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдкрд╕рдВрджреАрджрд╛) PRNG рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреАрдЬ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рдордиреЛрд░рдВрдЬрдХ рдпрд╛ рднрдпрд╛рдирдХ рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдХреГрддрд┐ рд╡рд┐рдЬреНрдЮрд╛рди ) ...

рд▓реЗрдХрд┐рди рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрддрд╛ рд╣реА рдирд╣реАрдВ рдЪрд▓рддрд╛ рдХрд┐ _ рд╕рднреА PRNGs (рднреВрдд рдФрд░ рднрд╡рд┐рд╖реНрдп) рдХреЗ рд▓рд┐рдП _, рдПрдХ 32-рдмрд┐рдЯ рдмреАрдЬ рдПрдХ рдмрд╣реБрдд рд╣реА рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреБрдЪреНрдЫ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдпреЛрдЧреНрдп рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдЬреЛ PRNG рдЦреЗрд▓рдиреЗ рдореЗрдВ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдирд╛ рд╕рдордп рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░реНрд╕рди рдЯреНрд╡рд┐рд╕реНрдЯрд░ рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЬрд╝реАрд░реЛрд╕ рд░рд╛рдЬреНрдп (рдпрд╛ рдСрд▓-рдЬрд╝реАрд░реЛрд╕ рд░рд╛рдЬреНрдп рдЬрд╣рд╛рдВ рдПрд▓рдПрдлрдПрд╕рдЖрд░ рд╕рднреА рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ) рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! Xoshiro рдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдкрд╛рд╕ рдЖрд░рдВрднреАрдХреГрдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╡рд╣ рдПрдХ рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╛рдд рдмрд╛рд░ рдЧреНрдпрд╛рд░рд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕реНрдкреЗрд╕ рдореЗрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдпрд╛ рджреЛ рд╕рдорд╛рди PCG рд╕реНрдЯреНрд░реАрдо, рдпрд╛ рдЬреЛ рднреА рд╣реЛ, рдХреЛ рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдХреЙрдиреНрдЯреНрд░рд┐рдмреНрдпреВрд╢рди рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрдиреНрдлрд┐рдирд┐рдЯрд┐рдорд▓ (рд╡реНрдпрд╡рд╣рд╛рд░ рд╢реВрдиреНрдп рдореЗрдВ) рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЬрдирд░реЗрдЯрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдмреМрджреНрдзрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдХрд░реНрд╖рдХ рдФрд░ рдЕрдХрд╛рджрдорд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рд╣реИрдВ, рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реБрдП рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдмрд╣реБрдд рдХрдо рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╡реЗ рдмреАрдЬрд╛рд░реЛрдкрдг рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд░реЛрдо рдЬрд▓рддрд╛ рд╣реИред

рдпрджрд┐ inc=1,2,3,4 рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдпрд╛ рддреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╢рд╛рдпрдж new_generator = (Bit)Generator().independent() , рд╣рдо рдЙрд╕ рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ 32 рдмрд┐рдЯ рд╕реАрдбрд┐рдВрдЧ рдХрд┐рддрдиреА рдЦрд░рд╛рдм рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдлреНрд░реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдЬ рдмрдирд╛рдиреЗ рдФрд░ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╢рд╛рдпрдж рдпрд╣ рднреА "рдПрдХ рдЬрдореЗ рд╣реБрдП рдмреАрдЬ рдХреИрд╢ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдЕрдЧрд░ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ"ред

рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдмреАрдЬ -> uint64_t [2] -> рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕64 (seed_by_array) -> uint128 рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдо, рд▓рдЧрд╛рддрд╛рд░ рдмреАрдЬ рдлреИрд▓ рд░рд╣реЗ рд╣реИрдВред

рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдмреАрдЬ -> uint64_t [2] -> рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕64 (seed_by_array) -> uint128 рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдо, рд▓рдЧрд╛рддрд╛рд░ рдмреАрдЬ рдлреИрд▓ рд░рд╣реЗ рд╣реИрдВред

рдпрд╛ рдмрд╕ рдХрд┐рд╕реА рдЕрдЪреНрдЫреЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред (рдпрд╣ рдПрдХ рдЖрдХреНрд╖реЗрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред)ред рд╕рд╕реНрддреЗ рдФрд░ рдЫреЛрдЯреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рд╣реИрдВред Multiply-XorShift рдХреЗ рдХреБрдЫ рд░рд╛рдЙрдВрдб рдареАрдХ рд╣реИрдВред

@Mdickinson рдХреА рдмрд╛рдд рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рдд рдХреЛ рд▓реЗрдХрд░ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реАрдорд┐рдд / рдкреНрд░рддрд┐рдХреВрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕рдореВрд╣ рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдФрд░ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдХреЗ рд╕рд╛рде, рдХреБрдЫ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдЪреВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдбреЗрд╡рд┐рдб рдмреНрд▓реИрдХрдореИрди рдХреА рдЦреЛрдЬ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рджреЛрдиреЛрдВ seed=1 рдФрд░ inc=0,1,2,... рд╕реНрдерд╛рдкрдирд╛ рд╕рд╣рд╕рдВрдмрдВрдз рдмрдирд╛рддреА рд╣реИред рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП interleaved PCG32 рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдирд╡реАрдирддрдо рдкреНрд░реИрдХреНрдЯреИрдВрдб рдбреНрд░рд╛рдЗрд╡рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

тЭп ./pcg_streams.py --seed 1 --inc 0 |time ./RNG_test stdin32
[
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 12728272447693586011,
            "inc": 1
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 7009800821677620407,
            "inc": 3
        }
    }
]
RNG_test using PractRand version 0.93
RNG = RNG_stdin32, seed = 0x470537d5
test set = normal, folding = standard (32 bit)

rng=RNG_stdin32, seed=0x470537d5
length= 128 megabytes (2^27 bytes), time= 4.0 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-3,T)                  R=  +9.6  p =  2.3e-4   mildly suspicious
  ...and 116 test result(s) without anomalies

rng=RNG_stdin32, seed=0x470537d5
length= 256 megabytes (2^28 bytes), time= 8.7 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-2,T)                  R= +26.1  p =  6.3e-13    FAIL           
  ...and 123 test result(s) without anomalies

./RNG_test stdin32  8.86s user 0.11s system 93% cpu 9.621 total

рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдлрд▓рддрд╛ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╡реЗрддрди рд╡реГрджреНрдзрд┐ред рдореИрдВ рдХрд▓ рддреБрдореНрд╣рд╛рд░реЗ рд╕рд╛рде рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ред

рдореИрдВ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рднреА рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрдзрд╛рд░ рдирдВрдмрд░ рд╣реЛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ 2*inc + 1 рдмрдЬрд╛рдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдВрдЯреНрд░реЙрдкреА-рд╕реАрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреВрд▓рд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рд╢реНрди рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рд╕рд┐рд░реНрдл рдпрд╛ рддреЛ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдлрд┐рд░ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрдХрд╛рд░ рдХреА "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛" рдХреЛ рд╕рд┐рдВрдЧрд▓ рдирдВрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рд╕рд╣рдХрд░реНрдореА рдХреЗ рдИрдореЗрд▓ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ 128 рдпрд╛ 256 рдмрд┐рдЯреНрд╕ рд╡рд╛рд▓реЗ рдЗрди рдЫреЛрдЯреЗ PRNGs рдХреЗ рд╕рд╛рде, рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрд╕ рд╣реЗрдХреНрд╕ рдХреЛ рдЕрдкрдиреА рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред рдпрд╣ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдЕрдкрдиреА рд╕рднреА рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдХреЛ рднреА рдПрдиреНрдЯреНрд░рд╛рдкреА-рд╕реИрдВрдкрд▓ рджреЗрдирд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЙрд╕рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рд╕рдм рдХреБрдЫ рд╕реНрдЯреЗрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд░ рд▓реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛ, рдЬрд┐рди рдкрд░ рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдирдИ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЪреНрдЫреА рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реВрдВ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╣реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдпрд╛ рдЬреЛ рднреА рд╣реЛ), рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдЬ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреАред

IIRC, рд░рд╣рд╕реНрдп рдореЙрдбреНрдпреВрд▓ рдУрдПрд╕ рдХреЗ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реНрд░реЛрдд рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдмреБрд░рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдЧрд╛рдореА / рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

рдмреБрдз рдкрд░, 29 рдордИ, 2019 рдХреЛ 3:19 рдмрдЬреЗ рдЯрд╛рдпрд▓рд░ рд░реЗрдбреНрдбреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рддрд░рдл, рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ рд╡рд╣ рд╣реИ
рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:
https://cryptography.io/en/latest/ рдкрд╛рдпрдерди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ
https://github.com/pyca ?

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреАрдврд╝реА рдкрд░ рдЙрдирдХрд╛ рдкреГрд╖реНрда
https://cryptography.io/en/latest/random-numbers/ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рд╣реИ:

рдкрд╛рдпрдерди 3.6 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░рд╣рд╕реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
https://docs.python.org/3/library/secrets.html рдореЙрдбреНрдпреВрд▓, рдЬреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкрд╛рда-рдЖрдзрд╛рд░рд┐рдд рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдкреАрдврд╝реА рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдЧрд░
рдХреНрд░рд╛рдпрдкреЛрдЯрдЧреНрд░рд╛рдлрд┐рдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░рдЦрд░рдЦрд╛рд╡ рдмреЛрдЭ
рдордЬрдмреВрддреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ NumPy рдмрдирд╛рдо рдХрд╣реЛ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИ
рдкрд╛рдЗрдХрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдФрд░ рд╢рд╛рдпрдж рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛
рдЙрд╕рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ / рдкреНрд▓рдЧрдЗрдиред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдерд╛рдирд┐рдПрд▓ рдиреЗ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд┐рдВрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ
рдкрд╣рд▓реЗ рд╕реЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд dtype рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ / рдЬреИрд╕реА рдЪреАрдЬреЗрдВ
рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдХреЛ рдмрд┐рдирд╛ API рдХреЗ рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмреЛрдЭ рдкрд░ рдЬрд░реВрд░реА рд╣реИ
рд╡рд┐рд╢реЗрд╖ рдирдП рдЕрдиреБрдкреНрд░рдпреЛрдЧред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWKXSSTX6QI7HJ65GYTP336O3A5CNFSM4HPX3CHKYY3N3H3H3H3H3H3H3&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWKGZMUB67VPCMFZYGTPX36O3ANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

@tylerjereddy рд╡реЗ рднреМрддрд┐рдХ рдПрдВрдЯреНрд░реЛрдкреА рд╕реНрд░реЛрдд рд╕реЗ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдЬреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ (рдФрд░ рдЖрдк!) рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИрдВред рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡реИрдХреНрдЯрд░, рдиреЙрди, рдХреА, рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ np.random рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд┐рдореБрд▓реЗрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рд╡рд╣ рдкреГрд╖реНрда _reproducible_ рдХреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд PRNGs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореМрдЬреВрдж рдЪреАрдЬреЗрдВ рднреА рд╣реИрдВ рдФрд░ _could_ cryptography рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реИрдВред _Ults_ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рдПрд▓реНрдЧреЛрд░рд┐рджрдореЛрдВ рдХрд╛ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрд╢рд▓ рд╕реА рдХреЛрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛ рд╕рд┐рдореБрд▓реЗрд╢рди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╣реИрдВред @bashtage рдиреЗ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП

рдореИрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЦрд╕реНрддрд╛ рдЯреАрдо рдХреЛ рдЬреЛ @pbstark рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрдзрд╛рд░рд┐рдд

рдЬреНрдпрд╛рджрд╛рддрд░ рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрдзрд╛рд░рд┐рдд PRNGs рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ _not_ рдХреЗ рдкрд╛рд╕ рдЕрдирдмрд╛рдЙрдВрдб рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬреЛ cryptorandom рднреА 2**(256+64) рдЕрдирдиреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирд┐рд╢реНрдЪрд┐рдд-рдЖрдХрд╛рд░ рдХреЗ 256-рдмрд┐рдЯ рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдЕрд╡рд╕реНрдерд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд-рдЖрдХрд╛рд░ рдХреЗ 64-рдмрд┐рдЯ рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рд╕рдВрднрд╡рдд: рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЖрдХрд╛рд░ рджреЗрдХрд░ PRNG рдХреЛ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рдмрд╕ рдПрдХ PRNG рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЖрдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЙрд╕рд╕реЗ рдКрдкрд░ рдХреЗ рд▓рд┐рдП рддрдп рд╣реИ, рддреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЬрдирд░реЗрдЯрд░ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдпреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ CS-PRNG рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ @pbstark рдХреА рдорд╛рдВрдЧ рдкрд░ рднрд╛рд░реА рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред рдмрд╣рд░рд╣рд╛рд▓, рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реБрдиреНрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рдЕрдиреНрдп рдЧреБрдг рд╣реИрдВ рдЬреЛ рдорд╛рдирдХ, рдмрдВрдзреЗ, CS-PRNGs рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЛрдИ рдмреНрд░реЗрдирд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ, IMO рдирд╣реАрдВ рд╣реИрдВред

рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХрд╛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди 256 рдмрд┐рдЯ рд╣реИрд╢ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рдЕрдмрд╛рдзрд┐рдд рд╣реИред
рдмреАрдЬ рдЕрд╡рд╕реНрдерд╛ рдордирдорд╛рдиреА рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрдпрддрди рдПрдХ рд╢реВрдиреНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИ
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдПред рдПрдХ рдЕрдирдмрд╛рдЙрдВрдб рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╣реЛрдЧрд╛
рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред рд╣рдордиреЗ рд╢реБрд░реВ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмрджрд▓ рджрд┐рдпрд╛
рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рдмрдЬрд╛рдп рдЕрдкреЗрдВрдб рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЕрдкрдбреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЦрд░реЛрдВрдЪ (рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдкреАрдбрдЕрдк) рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЛ рд╣реИрд╢рд┐рдВрдЧ рд╕реЗ рдкрдЪрд╛рдирд╛ред

рдмреБрдз рдкрд░, 29 рдордИ, 2019 рдХреЛ рд╢рд╛рдо 7:26 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдХрд░реНрди рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@tylerjereddy https://github.com/tylerjereddy рдЬреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ
рдПрдХ рднреМрддрд┐рдХ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╕реНрд░реЛрдд рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреА рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛
рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд (рдФрд░ рдЖрдк!)ред рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЖрд░рдВрднреАрдХрд░рдг рд╡реИрдХреНрдЯрд░, рдиреЙрди, рдХреА, рдЬреИрд╕реА рдЪреАрдЬреЗрдВ, рдЬреЛ рд╕рднреА рдЫреЛрдЯреА рд╣реИрдВред
рдЗрдирдореЗрдВ рд╕реЗ рдкреВрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╣реИ
np.random рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд┐рдореБрд▓реЗрд╢рди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдзрд╛рдУрдВред рд╡рд╣ рдкреЗрдЬ рд╣реИ
рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд PRNGs, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдЬреЛ
рдРрд╕реА рдЪреАрдЬреЗрдВ рднреА рд╣реИрдВ рдЬреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИрдВ рдФрд░ рдЖрджрд┐рдо рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВ
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдкреИрдХреЗрдЬ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ , рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
рдЙрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ
рдХреБрд╢рд▓ рд╕реА рдХреЛрдб, рдХрдо рд╕реЗ рдХрдо рдЬрд┐рдиреНрд╣реЗрдВ рддреИрдпрд╛рд░ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕рд┐рдореБрд▓реЗрд╢рди рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдПред @bashtage https://github.com/bashtage рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд
рдХреБрдЫ https://github.com/numpy/numpy/issues/13635#issuecomment-4949282850
рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЦрд╕реНрддрд╛ рдЯреАрдо рдХреЛ @pbstark рдХреНрдпрд╛ рд╣реИ
https://github.com/pbstark рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ
PRNGред рдЗрд╕рдХреЗ рдмрдЬрд╛рдП, рд╡рд╣ рдирд┐рд░реНрдмрд╛рдз рд░рд╛рдЬреНрдп рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛
рд╡рд╣ рдЧрдгрд┐рддреАрдп рд╕рдВрдкрддреНрддрд┐ рдЬрд┐рд╕реЗ рд╡рд╣ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИред

рдЕрдзрд┐рдХрддрд░ рдХреНрд░рд┐рдкреНрдЯреЛ-рдЖрдзрд╛рд░рд┐рдд PRNGs рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
@pbstark рдХреЗ рдкрд╛рд╕ рдЕрдмрд╛рдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ
https://github.com/pbstark рдЪрд╛рд╣рддреА рд╣реИред рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдЖрд╕рдкрд╛рд╕ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ
рдПрдХ рдкрд░рд┐рдорд┐рдд рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рд╡рд╣ рдХрд╛рдЙрдВрдЯрд░ рдЗрдзрд░-рдЙрдзрд░ рд▓реБрдврд╝рдХ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рд┐рдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
рдкрд░рд┐рдорд┐рдд рдЕрд╡рдзрд┐ред рддрдХрдиреАрдХреА рддреМрд░ рдкрд░, рдЙрдирдХреА рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░рдВрд╕реА
https://statlab.github.io/cryptorandom/ рднреА 2 ** (256 + 64) рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ
256-рдмрд┐рдЯ рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рд╕реНрдерд┐рддрд┐ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ
рдирд┐рд╢реНрдЪрд┐рдд-рдЖрдХрд╛рд░ 64-рдмрд┐рдЯ рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ред рд╢рд╛рдпрдж рдпрд╣реА рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ
рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рдХрд░ рдПрдХ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд PRNG рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЖрдХрд╛рд░, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдпрд╛ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ
рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ PRNG рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдП рд╣реИ
рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд░рд╛рдЬреНрдп, рдмрд╕ рдПрдХ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рддрдп рд╣реЛ рдЧрдИ рд╣реИ
рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЙрд╕рдХреЗ рдКрдкрд░, рдлрд┐рд░ рдкреАрд╕реАрдЬреА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЬрдирд░реЗрдЯрд░
http://www.pcg-random.org/party-tricks.html рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛
рдХрд╛рд░реНрдпред рдпреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ CS-PRNG рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдВрдЧреЗ
@pbstark https://github.com/pbstark рдХреА рд╡рд┐рд╢рд╛рд▓ рд░рд╛рдЬреНрдп рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ
рдорд╛рдВрдЧ рдкрд░ред рдмрд╣рд░рд╣рд╛рд▓, рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реБрдиреНрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рдЕрдиреНрдп рдЧреБрдг рд╣реИрдВ рдЬреЛ рдорд╛рдирдХ, рдмрдВрдзреЗ, CS-PRNGs рд╣реИрдВ
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдирд╣реАрдВ brainer рдбрд┐рдлрд╝реЙрд▓реНрдЯ, IMO рдирд╣реАрдВ рд╣реИрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWLGAF6YVIWXYZ2LTXPXXONONA5CNFSM4HPX3CHPYH3H3H3H3H3H3H3H3&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWLIJD3UCVY3NXCLPKDPX43ONANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ SHA-256 рдХрд╛ рдСрдирд▓рд╛рдЗрди рдЕрдкрдбреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдХреЗрд╡рд▓ 256-рдмрд┐рдЯ рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ 64-рдмрд┐рдЯ рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдкреВрд░реЗ рдкрд╛рда рдХреЛ рдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд┐рдЪрдХреЛрд▓реЗ рд╕реЗрдХрддреЗ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдкрд░ рдХреБрд╢рд▓ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдХрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ / рдкрд┐рдЫрд▓реЗ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдЖрдВрддрд░рд┐рдХ SHA-256 рд░рд╛рдЬреНрдп рдореЗрдВ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкрд░рд┐рдорд┐рдд рд╣реИред рдЬрдмрдХрд┐ рдЪрдХреНрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж 2**(256+64) рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 2**(256+64) рд╕рдВрднрд╡ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП 0 рд╕реЗ 2**64-1 , рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХрд╛рдВрд╢ 2**256 рдЖрдВрддрд░рд┐рдХ рд╣реИрд╢ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдПрдХ рдмрд╛рд░; рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ 32 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд╡рд╣рд╛рдБ рдЯрдХрд░рд╛рд╡ рдПрдХ рд▓рд╛ рдХрдмреВрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрднреА рдХреЛрдИ рдФрд░ рдмрд┐рдЯреНрд╕ рдирд╣реАрдВ рд╣реИрдВред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж; рд╕рдордЭ рд▓рд┐рдпрд╛ред рдореИрдВ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реВрдВрдЧрд╛: рд░рд╛рдЬреНрдп
рдЕрдВрддрд░рд┐рдХреНрд╖ рдЕрдмрд╛рдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди (рдХрдмреВрддрд░ рджреНрд╡рд╛рд░рд╛) рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдЖрдЙрдЯрдкреБрдЯ рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрдиред

рдмреБрдз рдкрд░, 29 рдордИ, 2019 рдХреЛ рд░рд╛рдд 8:21 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдХреЗрд░реНрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @ithub.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ SHA-256 рдХрд╛ рдСрдирд▓рд╛рдЗрди рдЕрдкрдбреЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд░рд╛рдЬреНрдп
рдпрд╣ рдХреЗрд╡рд▓ 256-рдмрд┐рдЯ рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ 64-рдмрд┐рдЯ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ
рд▓рдВрдмрд╛рдИ рдХрд╛рдЙрдВрдЯрд░ рд╣реИ рдХрд┐ рдпрд╣ рдЕрджреНрдпрддрди рдЬрдм рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрдХрдбрд╝ рдирд╣реАрдВ рд╣реИ
рдкреВрд░рд╛ рдкрд╛рдаред рд╣рд┐рдЪрдХреЛрд▓реЗ рд╕реЗрдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреИрд╕реЗ рдХреБрд╢рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдХрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХрд┐рдпрд╛рдВ / рдЕрддреАрдд рд╣реИрдВ
рдЗрддрд┐рд╣рд╛рд╕ рдЬреЛ рдПрдХ рд╣реА рдЖрдВрддрд░рд┐рдХ SHA-256 рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд┐рдд рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрдХреНрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж 2 (256 + 64) рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВ
рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 2 (256 + 64)
рд╕рдВрднрд╡ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ 0 рд╕реЗ 2 64-1 рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВрдЕрдзрд┐рдХрд╛рдВрд╢ 2 256 рдЖрдВрддрд░рд┐рдХ рд╣реИрд╢ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реИрдВ; рдПрдХ рдмрд╛рд░ рдЬрдм рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ 32 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ
рдмрд╛рдЗрдЯреНрд╕, рд╡рд╣рд╛рдБ рдЯрдХрд░рд╛рд╡ рдПрдХ рд▓рд╛ рдХрдмреВрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд╡рд╣рд╛рдБ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИрдВ
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/numpy/numpy/issues/13635?email_source=notifications&email_token=AANFDWOO6HRJZHTVBF2TLK3L3XBB5b3s5cnxhp5chwyhwH3H&hl=hi&hl=hi&hl=hi&hl=hi&hl=hi&hl=hi
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AANFDWM56HCQRZXDO3BAQHDPX5B3TANCNFSM4HPX3CHA
ред

-
рдлрд┐рд▓рд┐рдк рдмреАред рд╕реНрдЯрд╛рд░реНрдХ | рдПрд╕реЛрд╕рд┐рдПрдЯ рдбреАрди, рдЧрдгрд┐рддреАрдп рдФрд░ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди |
рдкреНрд░реЛрдлреЗрд╕рд░, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╡рд┐рднрд╛рдЧ |
рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп
рдмрд░реНрдХрд▓реЗ, рд╕реАрдП 94720-3860 | 510-394-5077 | рдЖрдБрдХрдбрд╝реЛрдВ редberkeley.edu/~stark |
@philipbstark

рдпрд╣ рднреА рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХреЗрд╡рд▓ 2**(256+64) рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЧреБрдЬрд░ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдкрдбреЗрдЯ рд╣рд░ рдмрд╛рд░ рд╕рдорд╛рди рд░реВрдк рд▓реЗрддрд╛ рд╣реИ, рдЖрдк рдЕрдВрддрддрдГ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдорд╛рд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рджреЗрдЦреА рд╣реИ рдФрд░ рдЕрдЬреНрдЮрд╛рдд (рдореЗрд░реЗ рд▓рд┐рдП) рд▓реВрдк рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдЕрд╡рдзрд┐ред рдЪрд╛рд╣реЗ рд╡рд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдкрд░рд┐рдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реЛ рдпрд╛ рдПрдХ рдкрд░рд┐рдорд┐рдд рдЕрд╡рдзрд┐, cryptorandom рджреЛрдиреЛрдВ рд╣реА рд╣реЛрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ MT19937 рд╕реЗ рднреА рдЫреЛрдЯреЗ рд╣реИрдВред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ cryptorandom , рдкреНрд░рддрд┐ рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдпрдХреАрди рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рд░реНрдмрд╛рдз рд╕реЗрдЯ рдпрд╛ рдЕрдирдмрд╛рдЙрдВрдб рдкреАрд░рд┐рдпрдб рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореИрдВ рдЕрднреА рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдлрд▓рддрд╛ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╡реЗрддрди рд╡реГрджреНрдзрд┐ред рдореИрдВ рдХрд▓ рддреБрдореНрд╣рд╛рд░реЗ рд╕рд╛рде рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ред

рдЕрднреА рднреА 512GiB рдкрд░ рдордЬрдмреВрдд:

тЭп ./pcg_streams.py -i 0 |time ./RNG_test stdin32
[
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 10843219355420032665,
            "inc": 1
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 5124747729404067061,
            "inc": 3
        }
    }
]
RNG_test using PractRand version 0.93
RNG = RNG_stdin32, seed = 0xb83f7253
test set = normal, folding = standard (32 bit)

rng=RNG_stdin32, seed=0xb83f7253
length= 128 megabytes (2^27 bytes), time= 4.0 seconds
  no anomalies in 117 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 256 megabytes (2^28 bytes), time= 8.6 seconds
  no anomalies in 124 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 512 megabytes (2^29 bytes), time= 16.9 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+2,13-2,T)                  R=  -8.0  p =1-2.1e-4   mildly suspicious
  ...and 131 test result(s) without anomalies

rng=RNG_stdin32, seed=0xb83f7253
length= 1 gigabyte (2^30 bytes), time= 33.8 seconds
  no anomalies in 141 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 2 gigabytes (2^31 bytes), time= 65.7 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+2,13-1,T)                  R=  -7.8  p =1-3.8e-4   unusual          
  ...and 147 test result(s) without anomalies

rng=RNG_stdin32, seed=0xb83f7253
length= 4 gigabytes (2^32 bytes), time= 136 seconds
  no anomalies in 156 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 8 gigabytes (2^33 bytes), time= 270 seconds
  no anomalies in 165 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 16 gigabytes (2^34 bytes), time= 516 seconds
  no anomalies in 172 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 32 gigabytes (2^35 bytes), time= 1000 seconds
  no anomalies in 180 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 64 gigabytes (2^36 bytes), time= 2036 seconds
  no anomalies in 189 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 128 gigabytes (2^37 bytes), time= 4064 seconds
  no anomalies in 196 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 256 gigabytes (2^38 bytes), time= 8561 seconds
  no anomalies in 204 test result(s)

rng=RNG_stdin32, seed=0xb83f7253
length= 512 gigabytes (2^39 bytes), time= 19249 seconds
  no anomalies in 213 test result(s)

рдЖрд╣, рдЕрдЧрд░ рд╣рдо рдХреНрд░рдорд┐рдХ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде 2 рд╕реЗ рдЕрдзрд┐рдХ рдзрд╛рд░рд╛рдПрдБ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЗрд╕реЗ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

тЭп ./pcg_streams.py -n 3  | time ./build/RNG_test stdin32
[
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 18394490676042343370,
            "inc": 2891336453
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 12676019050026377766,
            "inc": 2891336455
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 6957547424010412162,
            "inc": 2891336457
        }
    }
]
RNG_test using PractRand version 0.93
RNG = RNG_stdin32, seed = 0x4a9d21d1
test set = normal, folding = standard (32 bit)

rng=RNG_stdin32, seed=0x4a9d21d1
length= 128 megabytes (2^27 bytes), time= 3.2 seconds
  Test Name                         Raw       Processed     Evaluation
  DC6-9x1Bytes-1                    R= +19.4  p =  1.6e-11    FAIL           
  [Low8/32]DC6-9x1Bytes-1           R= +13.2  p =  4.6e-8    VERY SUSPICIOUS 
  ...and 115 test result(s) without anomalies

@imneme

рдпрджрд┐ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдореИрдВ рддреБрдореНрд╣реЗрдВ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд░реВрд░рдд рд╣реИ pcg64 rng2(-seed,-stream); рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ pcg64 rng2(-seed,-1-stream); рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, increment = 2 * stream + 1 рдкрд░рд┐рд╡рд░реНрддрдиред рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХрд╛ рдирд┐рд╖реЗрдз рд╕реНрдЯреНрд░реАрдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдирдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдореИрдВ рд╡рд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХрд╛ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдХреЗ рдХрдерд╛рдирдХ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред (рдФрд░ рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рд╡рд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдиреЗрддреНрд░рд╣реАрди рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред)

@imneme

рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдмрд╕ рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдмреАрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╛рдирд╛ред рдареАрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЧреБрдгрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рдЪреБрдиреЗ рд╣реБрдП рдПрдХ 64-рдмрд┐рдЯ LCG рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ LCGs рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╕рд╛рдл рддрд╕реНрд╡реАрд░ рджреЗрддрд╛ рд╣реИ рд▓рдЧрддрд╛ рд╣реИ a , рд╣рдо рддреЛ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рд░рд╛рдЬреНрдп рдХреА рдЬрдЧрд╣ рд╣реИ 2^127 , рд╕рднреА рдЬреЛрдбрд╝реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ (x, c) рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ c рд╡рд┐рд╖рдо рд╡реГрджреНрдзрд┐ рд╣реИред рд░рд╛рдЬреНрдп рдХрд╛ рдЕрджреНрдпрддрди рдХрд╛рд░реНрдп next : (x, c) тЖж (ax+c, c) , рд░рд╛рдЬреНрдп рдХреЗ рд╕реНрдерд╛рди рдХреЛ 2^63 рд▓рдВрдмрд╛рдИ рдореЗрдВ 2^64 рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реАрдбрд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдЪреБрдирдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

рддрдм рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдореВрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреА рд╣реИ: Z / 2^64Z рдкрд░ рдЗрдиреНрд╡рд░реНрдЯрд┐рдмрд▓ 1-рдбреА affine рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕рдореВрд╣ рдмрд┐рд▓реНрдХреБрд▓ 2^127 рдСрд░реНрдбрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ) рд░рд╛рдЬреНрдп рдХреЗ рд╕реНрдерд╛рди рдкрд░: affine рдкрд░рд┐рд╡рд░реНрддрди y тЖж ey + f рдЬреЛрдбрд╝реЗ (x, c) (ex + f, ec + (1-a)f) рдирдХреНрд╢рд╛ред рд╡рд╣ рд╕рдореВрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ next рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╕рдореВрд╣ рддрддреНрд╡ рдЬреЛ рдПрдХ рд╕реНрдерд╛рди (x, c) рдХреЛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдореЗрдВ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, (x2, c2) , (x, c) рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рдХрд╛ рднреА рдореИрдк рдХрд░рддрд╛ рд╣реИ (x2, c2) ред

tl; dr: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреБрдгрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдЧреБрдгрдХ рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рджреЛ LCG рдХреНрд░рдорд╛рдВрдХ (рдЪрд╛рд╣реЗ рдПрдХ рд╣реА рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реБрдХрд╣реЗрдб рдХреЗрд╕ рдореЗрдВ, рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реЗрддрди рд╡реГрджреНрдзрд┐) рдПрдХ рдПрдлрд╛рдЗрди рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрд┐рдирд╕реЗ рд╣рдо рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХрд┐ рдЪрдХреНрдХрд░рджрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣реИ, рдЬреИрд╕реЗ 2 рдЬреЛрдбрд╝рдирд╛ рдпрд╛ -1 рдЧреБрдгрд╛ рдХрд░рдирд╛ред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдлрд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдорд╛рдирдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

@mdickinson рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдкреАрд╕реАрдЬреА рдХреЗ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдПрд▓рд╕реАрдЬреА рдорд╛рдорд▓реЗ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВред рдкреАрд╕реАрдЬреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреВрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдирд╛ рдХрд░рдирд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдЯреЗ рдЧрдП 128-рдмрд┐рдЯ LCG рдкрд╣рд▓реЗ рд╕реЗ рд╣реА BigCrush рдХреЛ рдкрд╛рд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрдм рдореИрдВрдиреЗ pcg64 рд▓рд┐рдП рдПрдХ рдкрд░рдорд┐рдЯ рд▓рд┐рдпрд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рдЙрд╕ рдЖрдХрд╛рд░ LCG (XSL RR) рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдореВрд▓реА рд░рд╛рд╢рд┐ рдЪреБрдиреАред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, 64-рдмрд┐рдЯ рдПрд▓рд╕реАрдЬреА рдХрдИ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП pcg32 рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬреБрдЖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдкреАрд╕реАрдЬреА рдкреЗрдкрд░ рд╕реЗ рд╕рдмрд╕реЗ рдордЬрдмреВрдд рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдереНрд░реЗрдб рдкреБрд▓-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВрдиреЗ pcg32 рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд PCG рдХреНрд░рдордЪрдп (RXS M) рдХреА рдУрд░ рдЭреБрдХрд╛рд╡ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЕрднреА рддрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ рдЬрдм рдореИрдВ рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдВрдЧрд╛ред (рдЖрд░рдПрдХреНрд╕рдПрд╕ рдПрдо рдЖрд░рдПрдХреНрд╕рдПрд╕ рдПрдо рдПрдХреНрд╕рдПрд╕ рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рдЧреНрдирд╛ рдиреЗ рдЗрд╕ рдЖрдХрд╛рд░ рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рднреА рдХрд┐ рдбреЗрд╡рд┐рдб рдмреНрд▓реИрдХрдореИрди рдХреЛ рдкрд╕рдВрдж рд╣реИ)ред

рдкреАрд╕реАрдЖрд░ 32 (рдПрдХреНрд╕рдПрдЪрдПрд╕ рдЖрд░рдЖрд░ рдФрд░ рдЖрд░рд╕реАрдПрд╕ рдПрдо [рдФрд░ рдХрдЪреНрдЪреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд▓рд╕реАрдЬреА, рднреА] рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╣рдо рдЕрдВрддрд░-рдзрд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:)

#include "pcg_random.hpp"
#include <iostream>
#include <random>

// Create a "PCG" variant with a trivial output function, just truncation

template <typename xtype, typename itype>
struct truncate_only_mixin {
    static xtype output(itype internal)
    {
        constexpr size_t bits = sizeof(itype) * 8;
        return internal >> (bits/32);
    }
};

using lcg32 = pcg_detail::setseq_base<uint32_t, uint64_t, truncate_only_mixin>;

int main() {
    std::random_device rdev;
    uint64_t seed = 0;
    uint64_t stream = 0;
    for (int i = 0; i < 2; ++i) {
        seed   <<= 32;           
        seed   |= rdev();
        stream <<= 32;           
        stream |= rdev();
    }
    lcg32 rng1(seed,stream);
    lcg32 rng2(-seed,-1-stream);
    // pcg32 rng1(seed,stream);
    // pcg32 rng2(-seed,-1-stream);
    // pcg_engines::setseq_rxs_m_64_32 rng1(seed,stream);
    // pcg_engines::setseq_rxs_m_64_32 rng2(-seed,-1-stream);
    std::cerr << "RNG1: " << rng1 << "\n";
    std::cerr << "RNG2: " << rng2 << "\n";
    std::cout.precision(17);
    for (int i = 0; i < 10000; ++i) {
        std::cout << rng1()/4294967296.0 << "\t";
        std::cout << rng2()/4294967296.0 << "\n";
    }
}

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдЧреНрд░рд╛рдл @mdickinson рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ LCG рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЫрдВрдЯрдиреА:

corr-truncated-lcg

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЙрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рдПрд▓рд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдЕрдЧрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рджреЛ рдПрд▓рд╕реАрдЬреА рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдиреЗ рдЧрдП рдПрдбрд┐рдЯрд┐рд╡ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ (рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╕реНрдЯрд╛рд░реНрдЯ рд╡реИрд▓реНрдпреВ) рдХреЗ рд╕рд╛рде рд▓реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

corr-truncated-lcg-good

PCG рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдлрдВрдХреНрд╢рдВрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реБрдП, рдпрджрд┐ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ XSH RR рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рдХреЗрд╕ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

corr-pcg32-current

рдФрд░ рдпрд╣ рдПрдХ рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд (рдмреБрд░реА рддрд░рд╣ рд╕рд╣рд╕рдВрдмрджреНрдз) LCG рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде RXS M рд╣реИ:

corr-pcg32-future

рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ pcg32 рд▓рд┐рдП рдорд╕рд▓ рд░рд╣рд╛ рд╣реВрдВред рдкреНрд░рджрд░реНрд╢рди рдЬреБрд░реНрдорд╛рдирд╛ рдЫреЛрдЯрд╛ рд╣реИ, рдФрд░ pcg32 рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднрд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ-рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд pcg32 рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирд╕реЗ рдПрдХ рдЯрди рд╕рдВрдЦреНрдпрд╛ рдорд╛рдВрдЧрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд╕рд╣рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдПрдХ рдЕрд╕реАрдо-рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рджреЛ рджрд┐рдорд╛рдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрджреНрдпрдкрд┐, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреМрд░рд╛рдгрд┐рдХ рд╢рдХреНрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ pcg32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред

рдПрдХ рдХрд╛рд░рдг рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ pcg64 рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рднреА рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдПрдХ рд╣реА рд░рдЦрдиреЗ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рд╣реЛрдВрдЧреЗ рдПрдХ рдЕрд▓рдЧ рдПрдХ (рдЬреИрд╕реЗ, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП, рдЕрдХреЗрд▓реЗ рдПрдХ рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП)ред рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╕рднреА PRNGs рдХреЗ рд▓рд┐рдП, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рддрд╛рдЬрд╛ рдПрдиреНрдЯреНрд░реЛрдкреА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдВрдд рдореЗрдВ, NumPy рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ PCG64 рд░рд╛рдЬреНрдп рдХреЗ рджреЛ 256 рдмрд┐рдЯреНрд╕ рдЪрд╛рд╣рддрд╛ рд╣реИ (рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ 255 рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рд╕реЗ рднреА рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХрдо рд╕реБрд╡рд┐рдзрд╛ рд╡рд╛рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрд┐рдЯрдЧреЗрдВрд╕рд░ рдореЗрдВ рд╣реЛрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдирд╣реАрдВред

(рд▓реЗрдХрд┐рди рдЖрдк 32-рдмрд┐рдЯ рдкреАрд╕реАрдЬреА рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЛ рдЖрд░рдПрдХреНрд╕рдПрд╕ рдПрдо рд╡рди рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╕реА рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╣рд╛рд▓рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕реА рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдПрдХреНрд╕рдПрд╕ рдПрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ, рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕реА ++ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ред рдЕрд╡рддрд╛рд░ред)

[рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдЖрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! рдЦреИрд░, рдирд╣реАрдВ _that_ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред ;-)]

рдПрдХ рдХрд╛рд░рдг рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ pcg64 рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рднреА рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдХреЛ рд╕рдорд╛рди рд░рдЦрдиреЗ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рд╣реЛрдЧрд╛ рдПрдХ рдЕрд▓рдЧ рдПрдХ (рдЬреИрд╕реЗ, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП, рдЕрдХреЗрд▓реЗ рдПрдХ рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП)ред рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╕рднреА PRNGs рдХреЗ рд▓рд┐рдП, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рддрд╛рдЬрд╛ рдПрдиреНрдЯреНрд░реЛрдкреА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рд╕реНрдЯреЛрдХреЗрд╕реНрдЯрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рдпреВрдПрдХреНрд╕ рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рдПрдХ рдПрдХрд▓ "рдмреАрдЬ" рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдИрдореЗрд▓ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдЬреЛ рддрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рдХ рдмрдирд╛рддрд╛ рд╣реИред @stevenjkern рдиреЗ рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рдмрд╛рддрдЪреАрдд рдореЗрдВ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдирд┐рдпрд╛рдордХ рдПрдЬреЗрдВрд╕рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рддрд░рд╣ рдХреА рдмрд╛рддрдЪреАрдд рдЖрд╡рд╢реНрдпрдХ рдереА рдЬрд┐рд╕реЗ рдЙрд╕рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░рди рдХреЗ _output_ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рддреЛ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рдирд┐рдпрд╛рдордХ рдХреЛ рдХреЛрдб рдкрд░ рдПрдХ рдЧрд╣рд░рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ (рдЬреЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрд╖реЗрд░ рдереАред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдЪреНрдЫреЗ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдПрди рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрддрд╛рдИ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ (рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдПрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐)ред рдПрдордкреАрдЖрдИ рдЬреИрд╕реА рдкреБрд░рд╛рдиреА, тАЛтАЛрдХрдо рд▓рдЪреАрд▓реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрдкрд┐рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрди PRNGs рдореЗрдВ рдПрдиреНрдЯреНрд░рд╛рдкреА-рд╕реАрдбрд┐рдВрдЧ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рдЬрдЧрд╣ рд╣реИ рдЬреЛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдЙрдкрдХрд░рдг рд╣реИрдВред PRNGs рдХреЛ рд╕реАрдбрд┐рдВрдЧ рдХрд░рдирд╛ рдЕрдм рдЕрдбрд╝рдЪрди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕реНрдЯреЛрдХреЗрд╕реНрдЯрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЙрд╕ рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИред рдЕрдм рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рдПрдХ рднреА рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдлрд╝рд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд рдкреБрд╕реНрддрдХ-рд░рдЦ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдПрди рд╕реНрдЯреНрд░реАрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛рдлреА рдордЬрдмреВрдд рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдПрдордЯреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рдЪреАрдЬреЗрдВ рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рдЬреЛрдЦрд┐рдо рднрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдирд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдкреАрд╕реАрдЬреА рдХреА рдзрд╛рд░рд╛рдПрдВ рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреАред

рд░рд╛рдЬреНрдп рдХреЗ рд╕рдорд╛рди рд░рд╣рддреЗ рд╣реБрдП, рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдЕрдиреБрдХреНрд░рдо 0,1,2,3, ... рд╕реЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2**63 / 2**127 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ ...? рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рднрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ? рд░рд╛рдЬреНрдп рдХреЛ рдирдП рдЪрдХреНрд░ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣реИрд╢реЗрдб рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж рд╣рдо рдЗрд╕ рдЙрдк-рдЪрд░реНрдЪрд╛ рдХреЛ рдИрдореЗрд▓ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ рд░реЗрдХрд░реНрди , рдРрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ PRNGs рдХреЛ рдмрд╣реБрдд рдХрдо рдмреАрдЬ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди (PRNG рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛), рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдк рдмреАрдЬ рдЗрдирдкреБрдЯ рдХреЗ _k_ рдмрд┐рдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ _k_ рдмрд┐рдЯреНрд╕ рдХреА рдорд╛рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рддреЛ _j_ рдмрд┐рдЯреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рдЫреЛрдбрд╝реЗрдВ [рдХреБрдЫ рдордирдорд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ _j_] рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд┐рд░ _k_ рдмрд┐рдЯреНрд╕ рдкрдврд╝реЗрдВ), рднрд▓реЗ рд╣реА рд╕рднреА 2 ^ _k_ рдмрд┐рдЯреНрд╕ рд╡реИрдз рдЗрдирдкреБрдЯ рд╣реИрдВ, рд╕рднреА 2 рдирд╣реАрдВ ^ _k_ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдЯреНрд╕ рд╕реЗ рдмрд┐рдЯреНрд╕ рддрдХ рдХреЗ рдлрдВрдХреНрд╢рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИ [рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ] рдПрдХ рдЖрдХреНрд╖реЗрдк)ред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡рд┐рддрд░рдг рдПрдХ рджреНрд╡рд┐рдкрдж (2 ^ k, 2 ^ -k) рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо Poisson рд╡рд┐рддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ 2 ^ k / e рдорд╛рди рдирд╣реАрдВ рджреЗрдЦреЗ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рд╕рд╣реА рд╣реИ рдХрд┐ PRNG рдХреНрдпрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ _k_ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рдХрд┐ рдЬреЛ рдЧрд╛рдпрдм рд╣реИ рдЙрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛред

рд╕рдорд╕реНрдпрд╛ рддрдм рдХрдВрдкрд╛рдЙрдВрдб рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рд╣рд░ рдХреЛрдИ, рдПрдХ рд╣реА PRNG (рдЬреИрд╕реЗ Mersenne рдЯреНрд╡рд┐рд╕реНрдЯрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдПрдХ рд╣реА рдЫреЛрдЯреЗ рд╕реЗрдЯ рд╕реЗ рдмреАрдЬ рдЙрдард╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ, 10000 рд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛), рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╛рдпрд╕ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ _for- рд╣рд░ рдХреЛрдИ рдЗрд╕_ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдЪрд╛рд░ рдЕрдВрдХреЛрдВ рдХрд╛ рдмреАрдЬ рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдореЗрд░рд╕реЗрди рдЯреНрд╡рд┐рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрдХрдбрд╝ рд▓реЗрддреЗ рд╣реИрдВ, (рдХрд╣рддреЗ рд╣реИрдВ, рдХрдо рдорд┐рд▓рд┐рдпрди)ред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЖрд╢реНрд╡рд╛рд╕рди рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрд╢реБрдн рд╕рдВрдЦреНрдпрд╛ 13 _will рдХрднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рддреА рд╣реИ_ рдХреНрдпреЛрдВрдХрд┐ 10 рдмрд┐рд▓рд┐рдпрди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ 10% рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдЧрд╛), рдФрд░ рд╕рдВрдЦреНрдпрд╛ 123580738 рдХреЛ рдПрдХ рдХрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 16. рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рджрд╕ рдмрд┐рд▓рд┐рдпрди 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕рднреА рд▓реЛрдЧ рд╕рдорд╛рди рдирдореВрдирд╛_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдиреМ рдЕрдВрдХреЛрдВ рдХреЗ рдмреАрдЬреЛрдВ рдХреЛ рдЙрдард╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ 10000 рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реА рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдиреБрд░реВрдк рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрддрд╛рдирд╛ рдареАрдХ рд╣реИ рдЬреЛ рд╡реЗ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЧрд▓рдд рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢реЙрд░реНрдЯ-рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рддрд░реНрдХ рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ - рд╕рдВрднрд╡рддрдГ рд╕рд╣реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпреВрдпреВрдЖрдИрдбреА рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗ рдмреАрдЬрд╛рд░реЛрдкрдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдмреАрдЬ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреИрд╕реЗ рдмрд┐рдЦреЗрд░рдирд╛ рд╣реИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рдВрдбреБрдЯрд┐рд▓реНрд╕ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред)

(рдпрд╣рд╛рдБ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ ...)

// mtbias.cpp -- warning, uses 4GB of RAM, runs for a few minutes
// note: this is *not* showing a problem with the Mersenne Twister per se, it is
// showing a problem with simplistic seeding

#include <vector>
#include <iostream>
#include <random>
#include <cstdint>

int main() {
    std::vector<uint8_t> counts(size_t(std::mt19937::max()) + 1);
    for (size_t seed=0; seed < 10000; ++seed) {
        std::mt19937 rng(seed);
        for (uint i = 0; i < 1000000; ++i) {
            ++counts[rng()];
        }
    }
    size_t shown = 0;
    std::cout << "Never occurring: ";
    for (size_t i = 0; i <= std::mt19937::max(); ++i) {
        if (counts[i] == 0) {
            std::cout << i << ", ";
            if (++shown >= 20) {
                std::cout << "...";
                break;
            }
        }
    }
    std::cout << "\nMost overrepresented: ";
    size_t highrep_count = 0;
    size_t highrep_n = 0;
    for (size_t i = 0; i <= std::mt19937::max(); ++i) {
        if (counts[i] > highrep_count) {
            highrep_n = i;
            highrep_count = counts[i];
        }
    }
    std::cout << highrep_n << " -- repeated " << highrep_count << " times\n";
}

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП 128-рдмрд┐рдЯ рдмреАрдЬ рдХрд╛рдлреА рдХрдо рд╣реИрдВ, рдФрд░ рдореИрдВ рдЯреВрд▓рд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╕рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдВрдЯреНрд░реЙрдкреА-рд╕реИрдВрдкрд▓ рджреЗрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдпреВрдЖрдИрдбреА рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рдЫреЛрдЯреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдмреАрдЬ рдкреНрд░рддрд┐ рд░рди рдореЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рднреА рдПрдХ рдЕрдЪреНрдЫреА рд╣реИред

рдЪрд▓реЛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ PCG64 , рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рджреВрд╕рд░реЗ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ 128-рдмрд┐рдЯ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕реА рд░рд╛рдЬреНрдп рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛рдУрдВ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рд╣реИ? рдореИрдВ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдо рдПрдХ PCG64 рд╕реНрдЯреНрд░реАрдо рд╕реЗред рдореИрдВ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рд╛ рдкрд░ рд╕рдордиреНрд╡рдп рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рддрджрд░реНрде 63-рдмрд┐рдЯ рдорд▓реНрдЯреАрдкреНрд▓реЗрд╢рд┐рдлреНрдЯ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рддрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВ рдЕрднреА 32 GiB рдкрд░ рд╣реВрдВ), 8192 рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд▓реЗрдпреНрдбред

@imneme

рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @rkern рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ "рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡реЗ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдИрдореЗрд▓ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред рдореИрдВ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдЬреИрд╕реЗ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff тАЩрдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рд╛ рдкрд░ рд╕рдордиреНрд╡рдп рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рддрджрд░реНрде 63-рдмрд┐рдЯ рдорд▓реНрдЯреАрдкреНрд▓реЗрд╢рд┐рдлреНрдЯ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рддрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВ рдЕрднреА 32 GiB рдкрд░ рд╣реВрдВ), 8192 рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд▓реЗрдпреНрдбред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреБрдЫ рдмрдбрд╝реА рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдПрдХрд▓ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ n рд╕реНрдЯреНрд░реАрдо рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ (рдЬреЛ 2 ** 64 рд╣реИ, рдЬреЛ рдХрд┐ PCG64.jumped рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд┐рдерд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ n рдзрд╛рд░рд╛рдУрдВ рдХреЛ PCG64(seed).jumped(node_id) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЬрд╣рд╛рдБ node_id 0,1,2 рд╣реИ, ...

рдХреНрдпрд╛ рдХреЛрдИ PRNG рд╣реИ рдЬреЛ рдЗрдВрдбреЗрдХреНрд╕ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ MLFG рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 63-рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдерд╛ред

@bashtage , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╣реА рддрд░реАрдХрд╛ рдПрдХ рдмреАрдЬ рд▓реЗрдирд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдЫреЛрдЯреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╣реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ (рдкреАрд╕реАрдЬреА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░) рдПрдХ рдЧрдВрднреАрд░ рдорд┐рдХреНрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдк рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рди рд╣реЛред рдкреАрд╕реАрдЬреА рдЖрдкрдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рднрд▓реЗ рд╣реА рдпрд╣ рдерд╛, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рд╕рднреА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ PRNG рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдпрд╛ рдХреВрдж-рдЖрдЧреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

(рдЙрдлрд╝, рдореИрдВ рдЧрд▓рдд рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВ; рдореИрдВрдиреЗ рдкрд┐рдЫрд▓рд╛ рд╕рдВрджреЗрд╢ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдИрдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорддрд▓рдм рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╣реИ)

@imneme рдЕрднреА, рд╕рднреА рдЬреЗрдирд░реЗрдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреВрдж рдХрд╛ рд╕рдорд░реНрдерди рд╣реИ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЧреНрд░рд┐рдо-рдкреНрд░рдХрд╛рд░ рдХреА рдХреЙрд▓ рд╣реИрдВ)ред рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдмреЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PRNG.jumped() рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдмреАрдЬрд╛рд░реЛрдкрдг рдХреЗ рд▓рд┐рдП, рдПрдордЯреА рдЬрдирд░реЗрдЯрд░ рд╕рднреА рд▓реЗрдЦрдХ рдХреЗ рдЗрдирд┐рдЯ рд░реВрдЯреАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреАрд╕реАрдЬреА рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ

seed = np.array(required_size, dtype=np.uint64)
last = 0
for i in range(len(user_seed))
    if i < len(user_seed)
        last = seed[i] = splitmix64(last ^ user_seed[i])
    else:
        last = seed[i] = splitmix64(last)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВрдиреЗ jumped рдирд╣реАрдВ рджреЗрдЦреЗ рдереЗред рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 0x96704a6bb5d2c4fb3aa645df0540268d рдЧреБрдгрдХ, M рд╣реИред рдпрджрд┐ рд╣рдо M ^ (2 ^ 64) рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 0x6147671fb92252440000000000000001 рдЬреЛ рдХрд┐ рдПрдХ рднрдпрд╛рдирдХ LCG рдЧреБрдгрдХ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрджрд┐ рдЖрдк 128-рдмрд┐рдЯ рдПрд▓рд╕реАрдЬреА рд╕реЗ рд╣рд░ 2 ^ 64 рд╡рд╛рдВ рдЖрдЗрдЯрдо рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ (рдХрдо рдСрд░реНрдбрд░ рдмрд┐рдЯреНрд╕ рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВ)ред рдкреАрд╕реАрдЬреА рдХреЗ рдорд╛рдирдХ рдХреНрд░рдореЛрдиреНрдирддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ LCG рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрдХреНрд░реИрдореНрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рд╕реНрдХреНрд░реИрдореНрдмрд▓ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдПред

PCG64 рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдХреЗ рд╕рд╛рде рдЖрдзреЗ рдкреЗрдЯрд╛рдмрд╛рдЗрдЯ рддрдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рджреЛ рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрдИ рдкреЗрдЯрд╛рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд╢, рдЕрдЧрд░ рдЖрдк рджреЛ рдХреА рдЖрдЧреЗ рдХреА рд╡рд┐рд╢рд╛рд▓ рд╕рдЯреАрдХ рд╢рдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреВрджрддреЗ рд╣реИрдВ, рддреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп (рдХреБрдЫ рд╣рдж рддрдХ рдорд╛рдореВрд▓реА) рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG рдХреА рд╡рд┐рд╢рд╛рд▓ рджреВрд░реА рдХреЛ рд▓рдВрдШрди рд╕реЗ рд░реЛрдЧ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди-рд╢рдХреНрддрд┐ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдФрд░ рд╡рд┐рдЧреНрдирд╛ рджреЛрдиреЛрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреАрд╕реАрдЬреА рдХреЗ рдорд╛рдирдХ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдСрдл-рдж-рд╢реЗрд▓реНрдл рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ (рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдХреА рдиреАрдВрд╡ рд╣реИрдВ рдЬреЛ _is_ рдмрд╕ рдПрдХ рдХрд╛рдЙрдВрдЯрд░)ред рдЬрдм рдореИрдВрдиреЗ 2014 рдореЗрдВ рдлрд╛рд╕реНрдЯ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рджреЗрдЦрд╛ рддреЛ рдЧрддрд┐ рдЗрддрдиреА рд╢рд╛рдирджрд╛рд░ рдирд╣реАрдВ рд▓рдЧ рд░рд╣реА рдереА, рд▓реЗрдХрд┐рди рдЬрдм рд╡рд┐рдЧреНрдирд╛ рдиреЗ рдЗрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрдбрд╝рдмрдбрд╝рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдорд╛рдирдХ рдкреАрд╕реАрдЬреА (!) рдХреЛ рд╣рд░рд╛рдпрд╛ред

рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2 ^ 64 рдХрд╛ рдЬрдВрдк-рдлрд╝реЙрд░рд╡рд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдордЬрдмреВрдд рдЖрдЙрдЯрдкреБрдЯ рдлрдВрдХреНрд╢рди рдкрд░рдореАрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ (рдЬреЛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХрдо рд▓рд╛рдЧрдд рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдорд╛рдирдХ" рдкреАрд╕реАрдЬреА рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЖрдЙрдЯрдкреБрдЯ рдХреНрд░рдорд╛рдВрдХрди рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ jumped() рд╢рд╛рдпрдж рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

(BTW, рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рдЬрдВрдк-рдлреЙрд░рд╡рд░реНрдб рдЕрдиреНрдп PRNG рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдХреЛ рдХреБрдЫ рдЦрд░рд╛рдм рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ 0xd2424737395bb84d9 рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрддрди рд╡реГрджреНрдзрд┐ (a.ka. "рдЧрд╛рдорд╛") 2 ^ рд╕реЗ рдЖрдЧреЗ рд╣реИред 32 рдЖрдкрдХреЛ 0x95fb84d900000000 рдХрд╛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рджреЗрдЧрд╛, рдЬреЛ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред LFSRs рдХреЗ рд▓рд┐рдП, рдЦрд░рд╛рдм рдЬрдВрдк-рдлреЙрд░рд╡рд░реНрдб рд╢рд╛рдпрдж рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдРрд╕реЗ рдХреВрдж рд╣реЛрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рд░реВрдк рд╕реЗ рдмрдврд╝реЗрдВрдЧреЗред рд╡рд┐рд░рд▓ред)

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдХрдо рд╕реЗ рдХрдо PCG32 , .jumped() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 4 рдЗрдВрдЯрд░рд▓реЗрд╕реНрдб рд╕реНрдЯреНрд░реАрдо рдмрд╣реБрдд рдЬрд▓реНрджреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

тЭп ./pcg_streams.py --jumped -n 4 | time ./RNG_test stdin32
[
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 10149010587776656704,
            "inc": 2891336453
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 1158608670957446464,
            "inc": 2891336453
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 10614950827847787840,
            "inc": 2891336453
        }
    },
    {
        "bit_generator": "PCG32",
        "state": {
            "state": 1624548911028577600,
            "inc": 2891336453
        }
    }
]
RNG_test using PractRand version 0.93
RNG = RNG_stdin32, seed = 0xeedd49a8
test set = normal, folding = standard (32 bit)

rng=RNG_stdin32, seed=0xeedd49a8
length= 128 megabytes (2^27 bytes), time= 2.1 seconds
  Test Name                         Raw       Processed     Evaluation
  BCFN(2+0,13-3,T)                  R= +58.7  p =  1.3e-27    FAIL !!!       
  BCFN(2+1,13-3,T)                  R= +48.0  p =  1.5e-22    FAIL !!        
  BCFN(2+2,13-3,T)                  R= +16.0  p =  2.3e-7   very suspicious  
  DC6-9x1Bytes-1                    R= +53.5  p =  1.8e-32    FAIL !!!       
  [Low8/32]DC6-9x1Bytes-1           R= +27.4  p =  1.1e-17    FAIL !         
  ...and 112 test result(s) without anomalies

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдк рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рди рд╣реЛред рдкреАрд╕реАрдЬреА рдЖрдкрдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рднрд▓реЗ рд╣реА рдпрд╣ рдерд╛, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рд╕рднреА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдВред

рдЦреИрд░, рдпрд╣реА рд╣рдо рдпрд╣рд╛рдБ рддрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред :-) рд╣рдо рдкреНрд░рддреНрдпреЗрдХ PRNG рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдереЗ, рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдЧреБрдгреЛрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдпрдереЛрдЪрд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ "рдпрд╣рд╛рдБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ PRNG рдХреА рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ; рдЗрд╕рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рджреВрд╕рд░реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ"ред

рдХрд┐рд╕реА рднреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рдП рдЧрдП рд░рд╛рдЬреНрдп рдФрд░ рдПрдХ рдзрд╛рд░рд╛ рдЖрдИрдбреА рд╕реЗ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдзрд╛рд░рдгрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЛрдз рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ "рдпрд╣рд╛рдБ рд╕рднреА PRNGs рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛" рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░реВрдБрдЧрд╛ред рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реВрдВ, рдкреНрд░рддреНрдпреЗрдХ PRNG рдЗрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ"ред

рджреВрд╕рд░реА рдУрд░, рдЕрдЧрд░ рдпрд╣ рдкреНрд░реИрдХреНрдЯреНрд░реЗрдб рдкрд░ рдПрди GiB рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ BitGenerator рд▓рд┐рдП interleaved рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реАрдкреАрдпреВ рдЪрдХреНрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рддреЛ рдпрд╣ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рдХрд┐рд╕реА рднреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рдП рдЧрдП рд░рд╛рдЬреНрдп рдФрд░ рдПрдХ рдзрд╛рд░рд╛ рдЖрдИрдбреА рд╕реЗ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдзрд╛рд░рдгрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЛрдз рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ "рдпрд╣рд╛рдБ рд╕рднреА PRNGs рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛" рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░реВрдБрдЧрд╛ред рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реВрдВ, рдкреНрд░рддреНрдпреЗрдХ PRNG рдЗрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ"ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ "рдПрдХ рд╢реЛрдз рд╕рдорд╕реНрдпрд╛" (рдФрд░ рдЗрд╕ рддрд░рд╣ "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛") рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди C ++ 11 (рдЬреЛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдФрд░ рд╕рдЪреНрдЪреА рд▓рдВрдмреА-рд╕реНрдерд╛рдкрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ) _SeedSequence_ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ std::seed_seq рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдЬрд┐рд╕рдХрд╛ рдХрд╛рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ PRNGs рдХреЛ рд╕реАрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓рдЧрднрдЧ рд╕рднреА PRNG рд░реИрдВрдбрдо рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ / рд╕реАрдбреЗрдб рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рджреБрдИ рдирд╣реАрдВ рд╣реИ (рдХрд╣рдирд╛) random.org рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреБрдЫ рдЕрдзрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо (рд╕реАрдПрд╕ PRNG, рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди, рдЖрджрд┐) рд╕реЗ рдмрд╛рд╣рд░ рдЖ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рд╣реА рдпреЛрдЬрдирд╛ рдХреЗ PRNGs рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реАрдзрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реАрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкрд┐рдХрд┐рдВрдЧ рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рддрдХ рдЕрдВрддрд░рд╛рд▓ рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рд╣рдо рдХрднреА-рдХрднреА рд▓рд╛рдЗрди рдкрд░ рдЙрджрд╛рд╕реАрди рд░реВрдк рд╕реЗ рдкреВрдЫрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2 ^ 56)ред 2 ^ 255 рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди)ред рд╣рдо рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рдо _n_ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдПрдХ рдкреЗрдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ) рдХреЛрдИ рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрд┐рдд рд╡рд╛рд▓реЗ рдкреЗрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдЙрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред ( @ рд╢рд╛рдпрд░ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!)

[рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ _not_ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ PRNG рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдЦреБрдж рд╕реЗ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдЕрд╢реЛрднрдиреАрдп рд╣реИред]

рдареАрдХ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП _SeedSequence_ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдордирдорд╛рдирд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдЬ рд▓реЗрдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЪрдХреНрд░ рдореЗрдВ рдХрдИ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реАрдХрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реЛред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХреА рдмрд╛рдд рд╣реЛрдЧреАред

рдЖрд░рдВрднрд┐рдХ PRNG рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ, рдЪрдХреНрд░ рдореЗрдВ рдПрдХ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдореЗрдВ рд╣реИрд╢-рдорд┐рдХреНрд╕ рд╣реИ, рдЬреЛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рдереЗ (рдФрд░ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖ рдХрд┐ рдореИрдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛)ред jumped() рд╢реЛ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрдХреНрд░ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдХ рдирд╣реАрдВ рд╣реИред jumped() рдпрд╣ рднреА рдЖрд╢реНрд╡рд╛рд╕рди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛; рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрддреА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХреВрдж рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪреБрдирд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХреБрдЫ рдЬреНрдЮрд╛рди рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреАрд╕реАрдЬреА рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдереЗред

рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рд╣рдо PRNGs рдХреЛ рд╕рдВрдХреНрд░рдордг рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ new_state = seed_seq(old_state||streamID) рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рд╕рдВрдХреНрд░рдордг рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ PRNG рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдпрд╛ рдЙрдирдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо) рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ seed_seq рд╢рд╛рдорд┐рд▓ рдСрдкрд░реЗрд╢рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝реЗред рдореИрдВ рдХреБрдЫ, рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ wyhash рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ wyrand ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдк рд╕реНрд╡рдпрдВ рдмрд┐рдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PRNG рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА PRNGs рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрд╡рд╛рд╕рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдзреНрдпрдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╣ рдЕрдзреНрдпрдпрди рдХрд┐ рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдЦреБрдж рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред

рджреВрд╕рд░реА рдУрд░, new_state = seed_seq(old_state||streamID) рд╕рдВрднрд╡рддрдГ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрдВрдж рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ, рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП _SeedSequence_ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ: рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдХреНрд░рдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рдареАрдХ рд╣реИ C ++ рдХреЗ рдЕрдиреБрднрд╡ рдкрд░ рдЖрд░рд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, рдФрд░ рдмрд╕ рд╣рдорд╛рд░реЗ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдПрдХрд▓-рд╕реНрдЯреНрд░реАрдо рд╕рдордХрдХреНрд╖реЛрдВ рд╕реЗ рдмрджрддрд░ рдирд╣реАрдВ рд╣реИрдВред

рд╣реИрд╢-рдЬрдВрдк рдХрд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рдордиреНрд╡рдп-рдореБрдХреНрдд рддрд░реАрдХреЗ рд╕реЗ PRNGs рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдпреВрдЬреЗрд╕ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрдЪрд╛рд░ рдпрд╛ рдкреВрд░реНрд╡-рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред dask рдиреЗ рдЕрддреАрдд рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд╛рдВрдЧрд╛ рд╣реИред

рдпрджрд┐ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЕрдЪреНрдЫреА рд╕реАрдбрд┐рдВрдЧ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдорд╛рдирджрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдмрд╕ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рд░рд╛рдЬреНрдп рдХреА рдЬрдЧрд╣ рд╣реЛред

рд╕рднреА рдиреЗ рдХрд╣рд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 63-рдмрд┐рдЯ рд╣реИрд╢ рдХрд╛ PCG32 рдХреНрд░рдорд╛рдиреБрд╕рд╛рд░ рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рд╕реЗ ( range(N) ) рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред 8192 рдЗрдВрдЯрд░рд▓реЗрд╡реНрдб рд╕реНрдЯреНрд░реАрдо рдкреНрд░реИрдХреНрдЯрд┐рд░реИрдВрдб рдХреЛ 2 рдЯреАрдЖрдИрдмреА рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреА рд╣реИред рдпрджрд┐ рд╣рдо PCG рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдо рд╕реБрдЭрд╛рд╡ рджреЗрдВ рдХрд┐ рд▓реЛрдЧ рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЖрд░рдВрднрд┐рдХ PRNG рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ, рдЪрдХреНрд░ рдореЗрдВ рдПрдХ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдореЗрдВ рд╣реИрд╢-рдорд┐рдХреНрд╕ рд╣реИ, рдЬреЛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рдереЗ (рдФрд░ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖ рдХрд┐ рдореИрдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛)ред

рдореИрдВрдиреЗ рд╕рдВрднрд╡рддрдГ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдирд╣реАрдВ , рдореИрдВ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рдирд╣реАрдВ рдерд╛ рдХрд┐ PRNG рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрддреНрдо-рдкреБрдирд░реНрдирд┐рдзрд╛рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди, FWIW, рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ split() рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдФрд░, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдХреЗ split() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреНрдпреЛрдВ рднрдпрднреАрдд рдерд╛ (рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рднрдпрднреАрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдФрд░ рдкреАрд╕реАрдЬреА рдХреЛ рдЙрд╕реА рд╕рдордп рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ 20 рдЕрдХреНрдЯреВрдмрд░ 2014 рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдерд╛, рдЬрдмрдХрд┐ pcg-random.org рдЕрдЧрд╕реНрдд, 2014 рдореЗрдВ рд▓рд╛рдЗрд╡ рд╣реЛ рдЧрдпрд╛ рдерд╛ рдФрд░ 5 рд╕рд┐рддрдВрдмрд░ 2014 рдХреЛ PCG рдкреЗрдкрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛ред )ред рдкреАрд╕реАрдЬреА рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ (рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп PRNGs рдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рдорд╛рдирддрд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╡рд┐рдЧреНрдирд╛ рдХреА xor рд╢рд┐рдлреНрдЯ * рдФрд░ xorshift + рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ - 2014 рдореЗрдВ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХреА рдЧрдИ)ред рд╕рднреА рдХреЗ рдкрд╛рд╕ рдХрд╛рдлреА рд╕рд░рд▓ рдирд╣реАрдВ-рдХрд╛рдлреА-рдЕрдЪреНрдЫрд╛-рдкрд░реНрдпрд╛рдкреНрдд-рдкрд░реНрдпрд╛рдкреНрдд рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдХреНрд░реВрдмрд▓ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ рдкреАрд╕реАрдЬреА рдкреЗрдкрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛, рддреЛ рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ split() рдлрдВрдХреНрд╢рди рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрд╛; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рдорд╛рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ _k_-рдмрд┐рдЯ PRNG рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ _k_ рдЪрд░рдгреЛрдВ рдХреЗ рднреАрддрд░ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рд╛рдмрд┐рдд рд╣реЛрдЧреА рдмреАрдорд╛рд░ рдерд╛ред рдЙрд╕ рдЕрд╡рд▓реЛрдХрди рдиреЗ рдЗрд╕реЗ рдХрд╛рдЧрдЬ рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ред рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдмреВрдд рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреЗрдкрд░ рдХреЗ рдкрд╛рд╕-рдлрд╛рдЗрдирд▓-рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рдПрдХ рдлреБрдЯрдиреЛрдЯ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдХреБрдЫ рд╣рдж рддрдХ, рдХреНрдпреЛрдВрдХрд┐ рдкреАрд╕реАрдЬреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХрд╛ рдПрдХ рд╣реИрд╢ / рд╣рд╛рдерд╛рдкрд╛рдИ / рдХреНрд░рдореЛрдиреНрдирддрд┐ рдерд╛, рдпрджрд┐ рдЖрдк рдереЗ рдирдЯрдЦрдЯ рдорд╣рд╕реВрд╕ рдХрд░ рдЖрдк рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдерд╛ рдХрд┐ рд╕рдореАрдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдирдХреА рд▓рд╛рд▓ рдЭрдВрдбрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ PRNG рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рдирд╛ рдПрдХ PRNG рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдиреБрднрд╡рд╣реАрди рд╣реИрдВред

рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдкреЗрдкрд░ рдХреЛ рдкрдврд╝рдирд╛, рдореБрдЭреЗ рдмрд╣реБрдд рдкрд╕рдВрдж рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ split() рджреЗрдЦрд╛, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдмреБрд░рд╛ рд▓рдЧрд╛ред рдЗрд╕рдиреЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдордЬрд╛рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЯреИрдореНрдкреЛрд▓ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛ рджрд┐рдпрд╛ред рдпрд╣ рдХреБрдЫ рд╕рд╛рд▓ рдмрд╛рдж рддрдХ рдирд╣реАрдВ рдерд╛ рдЬрдм рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рджреВрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рд╣реИ (рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ), рддреЛ рдЖрдк рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд░реИрдВрдбрдо рдореИрдкрд┐рдВрдЧ (рдЬреЛ рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдЬреИрд╕реЗ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ "рдиреЙрди рдЬреАрд░реЛ рдПрд╕рд┐рдореНрдкреНрдЯреЛрдЯрд┐рдХ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде, рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдмрд╕реЗ рдКрдВрдЪрд╛ рдкреЗрдбрд╝ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рдЪрдХреНрд░ рдкрд░ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ", рдореЗрд░рд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛрдирд╛ рдХрдард┐рди рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдбрд┐рдЬрд╛рдЗрдирд░ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдкрд░ рдирд╣реАрдВ рдЧрдП рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдХреГрддрд┐ рдЙрдирдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╕реНрдкреНрд▓рд┐рдЯрдорд┐рдХреНрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░рд╛рдЬреНрдп-рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рдбрдВрдк рд╣реИ, рдЬреЛ next() рдФрд░ split() рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди (рдФрд░ рдХрдареЛрд░рддрд╛ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд) рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рддреАрди рдХреЛ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ:

Testing: SplitMix16: void advance() { rng = rng.split();}

Finding cycles...
- state 00000000 -> new cycle 1, size 4, at 000043b0 after 516 steps
- state 00000050 -> new cycle 2, size 41, at 00002103 after 2 steps
- state 000000cd -> new cycle 3, size 4, at 0000681a after 6 steps
- state 00000141 -> new cycle 4, size 23, at 00004001 after 11 steps
- state 00000dee -> new cycle 5, size 7, at 00007436 after 4 steps
- state 00008000 -> new cycle 6, size 90278, at 5e5ce38c after 46472 steps
- state 00030000 -> new cycle 7, size 6572, at 12c65374 after 10187 steps
- state 00030016 -> new cycle 8, size 3286, at 65d0fc0c after 402 steps
- state 00058000 -> new cycle 9, size 17097, at 2a2951fb after 31983 steps
- state 08040000 -> new cycle 10, size 36, at 08040000 after 0 steps
- state 08040001 -> new cycle 11, size 218, at 08040740 after 360 steps
- state 08040004 -> new cycle 12, size 10, at 38c01b3d after 107 steps
- state 08040006 -> new cycle 13, size 62, at 38c013a0 after 39 steps
- state 08040009 -> new cycle 14, size 124, at 08045259 after 24 steps
- state 08040019 -> new cycle 15, size 32, at 38c06c63 after 151 steps
- state 08040059 -> new cycle 16, size 34, at 38c00217 after 17 steps
- state 08040243 -> new cycle 17, size 16, at 38c06e36 after 13 steps
- state 123c8000 -> new cycle 18, size 684, at 77d9595f after 194 steps
- state 123c8002 -> new cycle 19, size 336, at 5de8164d after 141 steps
- state 123c9535 -> new cycle 20, size 12, at 123c9535 after 0 steps
- state 139f0000 -> new cycle 21, size 545, at 743e3a31 after 474 steps
- state 139f0b35 -> new cycle 22, size 5, at 139f0b35 after 0 steps
- state 139f1b35 -> new cycle 23, size 5, at 68d3c943 after 8 steps

Cycle Summary:
- Cycle 1, Period 4, Feeders 32095
- Cycle 2, Period 41, Feeders 188
- Cycle 3, Period 4, Feeders 214
- Cycle 4, Period 23, Feeders 180
- Cycle 5, Period 7, Feeders 12
- Cycle 6, Period 90278, Feeders 1479024474
- Cycle 7, Period 6572, Feeders 102385385
- Cycle 8, Period 3286, Feeders 5280405
- Cycle 9, Period 17097, Feeders 560217399
- Cycle 10, Period 36, Feeders 413
- Cycle 11, Period 218, Feeders 51390
- Cycle 12, Period 10, Feeders 1080
- Cycle 13, Period 62, Feeders 4113
- Cycle 14, Period 124, Feeders 4809
- Cycle 15, Period 32, Feeders 2567
- Cycle 16, Period 34, Feeders 545
- Cycle 17, Period 16, Feeders 87
- Cycle 18, Period 684, Feeders 95306
- Cycle 19, Period 336, Feeders 100263
- Cycle 20, Period 12, Feeders 7
- Cycle 21, Period 545, Feeders 163239
- Cycle 22, Period 5, Feeders 12
- Cycle 23, Period 5, Feeders 34

- Histogram of indegrees of all 2147483648 nodes:
      0  529334272
      1 1089077248
      2  528875520
      3     131072
      4      65536
Testing: SplitMix16: void advance() { rng.next(); rng = rng.split();}

Finding cycles...
- state 00000000 -> new cycle 1, size 36174, at 6b34fe8b after 21045 steps
- state 00000002 -> new cycle 2, size 4300, at 042a7c6b after 51287 steps
- state 0000000f -> new cycle 3, size 11050, at 0b471eb5 after 4832 steps
- state 0000001d -> new cycle 4, size 38804, at 2879c05c after 16280 steps
- state 00000020 -> new cycle 5, size 4606, at 46e0bdf6 after 7379 steps
- state 00046307 -> new cycle 6, size 137, at 0a180f87 after 89 steps
- state 00081c25 -> new cycle 7, size 16, at 177ed4d8 after 27 steps
- state 0044c604 -> new cycle 8, size 140, at 5e1f125b after 44 steps
- state 006e329f -> new cycle 9, size 18, at 006e329f after 0 steps
- state 13ebcefc -> new cycle 10, size 10, at 13ebcefc after 0 steps

Cycle Summary:
- Cycle 1, Period 36174, Feeders 975695553
- Cycle 2, Period 4300, Feeders 766130785
- Cycle 3, Period 11050, Feeders 110698235
- Cycle 4, Period 38804, Feeders 251133911
- Cycle 5, Period 4606, Feeders 43723200
- Cycle 6, Period 137, Feeders 4101
- Cycle 7, Period 16, Feeders 172
- Cycle 8, Period 140, Feeders 2310
- Cycle 9, Period 18, Feeders 124
- Cycle 10, Period 10, Feeders 2

- Histogram of indegrees of all 2147483648 nodes:
      0  529334272
      1 1089077248
      2  528875520
      3     131072
      4      65536
Testing: SplitMix16: void advance() { rng.next(); rng = rng.split(); rng = rng.split();}

Finding cycles...
- state 00000000 -> new cycle 1, size 40959, at 0069b555 after 49520 steps
- state 00000031 -> new cycle 2, size 1436, at 5f619520 after 2229 steps
- state 000003a4 -> new cycle 3, size 878, at 18d1cb99 after 1620 steps
- state 0000046c -> new cycle 4, size 2596, at 46ba79c0 after 1591 steps
- state 0000c6e2 -> new cycle 5, size 24, at 0212f11b after 179 steps
- state 000af7c9 -> new cycle 6, size 61, at 40684560 after 14 steps
- state 00154c16 -> new cycle 7, size 110, at 29e067ce after 12 steps
- state 0986e055 -> new cycle 8, size 4, at 2b701c82 after 7 steps
- state 09e73c93 -> new cycle 9, size 3, at 352aab83 after 1 steps
- state 19dda2c0 -> new cycle 10, size 1, at 78825f1b after 2 steps

Cycle Summary:
- Cycle 1, Period 40959, Feeders 2129209855
- Cycle 2, Period 1436, Feeders 5125630
- Cycle 3, Period 878, Feeders 7077139
- Cycle 4, Period 2596, Feeders 5997555
- Cycle 5, Period 24, Feeders 24221
- Cycle 6, Period 61, Feeders 1774
- Cycle 7, Period 110, Feeders 1372
- Cycle 8, Period 4, Feeders 23
- Cycle 9, Period 3, Feeders 4
- Cycle 10, Period 1, Feeders 3

- Histogram of indegrees of all 2147483648 nodes:
      0  829903716
      1  684575196
      2  468475086
      3  132259769
      4   32192209
      5      58402
      6      17026
      7       1982
      8        261
      9          1
Testing: SplitMix16: void advance() { rng.next(); rng.next(); rng = rng.split();}

Finding cycles...
- state 00000000 -> new cycle 1, size 55038, at 3e57af06 after 30005 steps
- state 00000005 -> new cycle 2, size 376, at 4979e8b5 after 6135 steps
- state 0000001e -> new cycle 3, size 10261, at 0cd55c94 after 1837 steps
- state 0000002d -> new cycle 4, size 3778, at 7f5f6afe after 3781 steps
- state 00000064 -> new cycle 5, size 2596, at 3bc5404b after 5124 steps
- state 0000012b -> new cycle 6, size 4210, at 525cc9f3 after 397 steps
- state 00000277 -> new cycle 7, size 1580, at 410010c8 after 1113 steps
- state 00001394 -> new cycle 8, size 916, at 7b20dfb0 after 193 steps
- state 00063c2d -> new cycle 9, size 51, at 6e92350b after 121 steps
- state 058426a6 -> new cycle 10, size 8, at 058426a6 after 0 steps
- state 0e5d412d -> new cycle 11, size 1, at 0e5d412d after 0 steps
- state 4c2556c2 -> new cycle 12, size 1, at 4c2556c2 after 0 steps

Cycle Summary:
- Cycle 1, Period 55038, Feeders 2027042770
- Cycle 2, Period 376, Feeders 28715945
- Cycle 3, Period 10261, Feeders 49621538
- Cycle 4, Period 3778, Feeders 13709744
- Cycle 5, Period 2596, Feeders 15367156
- Cycle 6, Period 4210, Feeders 10418779
- Cycle 7, Period 1580, Feeders 1782252
- Cycle 8, Period 916, Feeders 744273
- Cycle 9, Period 51, Feeders 2351
- Cycle 10, Period 8, Feeders 24
- Cycle 11, Period 1, Feeders 0
- Cycle 12, Period 1, Feeders 0

- Histogram of indegrees of all 2147483648 nodes:
      0  529334272
      1 1089077248
      2  528875520
      3     131072
      4      65536

рдЖрджрд┐ред

рдЖрд╣, рдорд╣рд╛рдиред рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рд╢реВрдЯ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбрд░ рдерд╛ рдХрд┐ рд╣рдо рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдПред :-)

рдкреАрд╕реАрдЬреА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдХреЛрдИ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░? рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рддрдВрддреНрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЖрдИрдбреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдХреНрдпрд╛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди (рдЖрд╕рд╛рди) рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ PCG64 рдореЗрдВ рджреЛ рд░рд╛рдЬреНрдп рдХрд┐рддрдиреЗ рджреВрд░ рд╣реИрдВ?

рд╣рд╛рдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: http://www.pcg-random.org/useful-features.html#distance

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдХреНрдпрд╛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди (рдЖрд╕рд╛рди) рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ PCG64 рдореЗрдВ рджреЛ рд░рд╛рдЬреНрдп рдХрд┐рддрдиреЗ рджреВрд░ рд╣реИрдВ?

рд╣рд╛рдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: http://www.pcg-random.org/useful-features.html#distance

C ++ рд╕реНрд░реЛрдд рдореЗрдВ, рджреВрд░реА рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рднреА рдмрддрд╛рдПрдЧрд╛, рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдмрд╛рдд рджреЗрдЧрд╛ (рдЬрд╣рд╛рдВ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдПрдХ рдЬреЛрдбрд╝рд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ)ред

рд╕рдВрдпреЛрдЧ рд╕реЗ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG рдХреЗ рд▓рд┐рдП, рд╣рдо рджреВрд░реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкрджреЛрдВ рд╕реЗ рдХрд┐рддрдиреЗ рд╕рд╣рд╕рдВрдмрджреНрдз рд╣реИрдВред рдереЛрдбрд╝реА рджреВрд░реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рд╣реИ (рдФрд░ рдХрд┐рд╕реА рднреА PRNG рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдмрд┐рдЯ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд░реА рдпрд╛ рддреЛ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ 2 ^ 64 ( 0x10000000000000000 ) рд╕реЗ рдЖрдЧреЗ рдХреВрдж рд░рд╣рд╛ рд╣реИред .jumped рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореЗрд░реА рдкреАрд╕реАрдЬреА рдЯреВ-рдбреВ рд▓рд┐рд╕реНрдЯ рдореЗрдВ " independence_score " рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд░реИрдВрдбрдо-рд▓реБрдХрд┐рдВрдЧ рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдХрд┐рддрдирд╛ рд╣реИ (рд╡рдЬрди рдХрдо рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрджрд┐) - рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рд▓рдЧрднрдЧ рдЖрдзрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рдФрд░ рдЖрдзреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрджрд╛рд░рддрд╛рдкреВрд░реНрд╡рдХ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реЛрддреЗ рд╣реИрдВ)ред

рдПрдХ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _keep_ jumped PCG64 рд╕рд╛рде рджреНрд╡рд╛рд░рд╛ рдХреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ n * 0x10000000000000000 рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рджреНрд╡рд╛рд░рд╛ рдХреВрдж n * 0x9e3779b97f4a7c150000000000000000 (128 рдмрд┐рдЯ рддрдХ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛)ред рдпрд╣ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЧрд╛ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд .jumped(3).jumped(5) == .jumped(8) LC

(рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ " 0x10000000000000000 рдЕрдЧреНрд░рд┐рдо рдирд╣реАрдВ рд╣реИ" рдпрд╣ " рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рди рджреЗрдВ " рдФрд░ рдореИрдВ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдБред рдпрдХреАрди рд╣реИ, рдпрд╣ рд╢рд╛рдВрдд рд╣реИ рдХрд┐ independence_score рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рдмрд╛рдд (рдФрд░ рд╕рдорд╛рди рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛), рдПрдХ рдордЬрдмреВрдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рднрд▓реЗ рд╣реА рд▓реЛрдЧреЛрдВ рдХреЛ (рджреБрд░реНрд▓рдн) рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХреГрддрд┐рдкреВрд░реНрдг рд╣реИрдВ LCG, рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред PCG рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореИрдВ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдЧрд░реНрдореА рдореЗрдВ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рдЖрдк рдкреАрд╕реАрдЬреА рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЯрдХреНрдХрд░ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред)

рдкреАрд╕реАрдЬреА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдХреЛрдИ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░? рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╕реНрд╡рддрдВрддреНрд░ рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рддрдВрддреНрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЖрдИрдбреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдкрдХреЛ рдореБрд░рдореБрд░ 3 рдорд┐рдХреНрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ 0x9e3779b97f4a7c15f39cc0605cedc835 (fract рдХрд╛ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ) рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди 0xb7e151628aed2a6abf7158809cf4f3c7 (рдИ рдХрд╛ рдЖрдВрд╢рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛) рднреА рдареАрдХ рд╣реЛрдЧрд╛, рдпрд╛ _any_ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ-рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛ред)

рдореИрдВ wyhash (https://github.com/wangyi-fudan/wyhash) рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдФрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ рдЬреЛ BigCrush рдФрд░ PracticeRand рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред C рдХреЛрдб рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ

inline  uint64_t    wyrand(uint64_t *seed){    
    *seed+=0xa0761d6478bd642full;    
    __uint128_t t=(__uint128_t)(*seed^0xe7037ed1a0b428dbull)*(*seed);    
    return  (t>>64)^t;    
}

@ wangyi-fudan, рдореИрдВ рдЦреБрдж рдХреЛ рдирд╣реАрдВ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЖрдкрддреНрддрд┐ рд╣реИред

рдореЗрд░реЗ рд╕реАрдорд┐рдд рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ: PRNG рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдЬреЗрдХреНрд╢рди рдЖрд╡рд╢реНрдпрдХ / рдЗрд╖реНрдЯ рдХреНрдпреЛрдВ рд╣реИ?
рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА :-)

@ wangyi-fudan, рдпрджрд┐ 64-рдмрд┐рдЯ ints рд╕реЗ 64-рдмрд┐рдЯ ints рддрдХ рдПрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЖрдХреНрд╖реЗрдк (рдпрд╛рдиреА, 1-рдЯреВ -1 рдлрд╝рдВрдХреНрд╢рди) рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, 64 рдмрд┐рдЯ рд░реИрдВрдбрдо рдирдВрдмрд░ рдЬрдирд░реЗрдЯрд░ рдЖрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо 1.2 * 2 ^ 32 рд░реИрдВрдбрдо рдирдВрдмрд░ (http://mathworld.wolfram.com/BirthdayAttack.html) рдХреЗ рдмрд╛рдж рдПрдХ рдЯрдХреНрдХрд░ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред 2 ^ 64 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЯрдХрд░рд╛рд╡ рд╣реЛрдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдЯрдХрд░рд╛рд╡ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИрдВ рдЬрдмрдХрд┐ рдЖрдкрддреНрддрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЬреБрдП рдХреА рдореЗрдЬ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 3 рдмрд┐рдЯ PRNG) рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг 8 рдЯреНрд░реЗрд▓реНрд╕ рдХреЗ рднреАрддрд░ 0 рдорд╛рди рд╣реИ, рддреЛ рдореИрдВ 5 рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╢реВрдиреНрдп рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рджрд╛рдВрд╡ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рд╛рд╣рд╕ рдХрд░реВрдВрдЧрд╛ред

@ wangyi-fudan, рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо рд╕реНрдЯреНрд░реАрдо-рдЖрдИрдбреА рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ рддрд╛рдХрд┐ 1,2,3 рдЬреИрд╕реА рдзрд╛рд░рд╛рдПрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рдЦреЗрдВ (рдЙрд░реНрдл рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп)ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЯрдХреНрдХрд░реЛрдВ рдореЗрдВ рдХреЛрдИ рдЧреБрдг рдирд╣реАрдВ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ PRNGs рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореИрдкрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ PRNGs рдФрд░ рд░реИрдВрдбрдо рдЗрдирд╡рд░реНрдЯреЗрдмрд▓ рдореИрдкрд┐рдВрдЧ (1-рдЯреВ -1 рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдВрддрд░ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рд╣реИред рдпрд╣ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореИрдкрд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд PRNGs рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдФрд░ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рддреЗрдЬрд╝реА рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛ред рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдореЗрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЦрд╛рдорд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рдо _n_ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдПрдХ рдкреЗрдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ) рдХреЛрдИ рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрд┐рдд рд╡рд╛рд▓реЗ рдкреЗрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рднреА рдЙрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рдкрд┐рдпрд░реЗ L'Ecuyer рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ;-) рдкреГрд╖реНрда 15

рд╣рд╛рдВ, рдЬрдм рд╡рд╣ рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдареАрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ!

@rkern @imneme рд╕рд░рд▓рддрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рдЧрдгрд┐рдд рджреЛрдиреЛрдВ рдореЗрдВред рдХрд┐ рдХреБрдЫ рд╕рд░рд▓ рдХрд╛рдо рд╕реЗ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИрдВ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╕рдмреВрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдмреНрд▓реЗрдпрд░ : рдПрдХ рд╣рд╛рд╕реНрдп рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдЪреНрдЪрд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ _ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ BitGenerator PCG64 ред рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░рдкреВрд░реНрдг рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдФрд░ рд╕рд╣рдирд╢рдХреНрддрд┐!

рдЗрд╕ рд╕реВрддреНрд░ рд╕реЗ рдмрд╣реБрдд рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореБрдЭреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдЪрд╛рд░ ...

рдкреГрд╖реНрдарднреВрдорд┐

рдХрдИ рдЙрдкрд╛рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ pcg64 рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╛рдпреЛрдВ рдХреЗ рддрд╣рдд, рдЗрд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рд╕рд╛рдл рдмрд┐рд▓ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░реЗрдХреНрдЯреИрдВрдб рдХреЗ рд╕рд╛рде рдЖрдзреА рдкреЗрдЯреАрдмрд╛рдЗрдЯ рдкрд░ рдЪрд▓рд╛ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдХреГрддрд┐ рдореЗрд░реЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдмреИрдарддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ " рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдордд рдкрдХрдбрд╝реЛ ", рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп PRNG рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдордЬрдмреВрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдмреЗрд╣рддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ...

рдЗрд╕рд▓рд┐рдП, рд▓рдЧрднрдЧ 25 рджрд┐рди рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдкреАрд╕реАрдЬреА рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдПрдХ рдирдП рд╕рджрд╕реНрдп рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ ...

рд▓рдХреНрд╖реНрдп

рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдирдП рдкреАрд╕реАрдЬреА рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдерд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди pcg64 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдПрдХ рдмреВрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдХреА:

  • рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ XSL рдЖрд░рдЖрд░ рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ рдХреЛ рд╣рд╛рдерд╛рдкрд╛рдИ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛)ред
  • рдкреНрд░рджрд░реНрд╢рди рдореМрдЬреВрджрд╛ pcg64 рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ (рдпрд╛ рддреЗрдЬрд╝) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдбрд┐рдЬрд╛рдЗрди PCG-ish рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА, рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдп рдХреЗ _any_ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ)ред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рднрд╛рд░реА рд╕реНрдХреНрд░реИрдореНрдмрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрджрдо рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреАрд╕реАрдЬреА рдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG "рд▓рдЧрднрдЧ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рдерд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА рдХрд╛рдлреА рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо 1 рд╕реЗ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рддрд░рд╣ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

рд╕реНрдкреЙрдЗрд▓рд░

рдореБрдЭреЗ рд╕рдлрд▓рддрд╛ рдХреА рд╕реВрдЪрдирд╛ рдорд┐рд▓реА рд╣реИ! рд▓рдЧрднрдЧ 25 рджрд┐рди рдкрд╣рд▓реЗ рдЬрдм рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рдерд╛ред рдЬрдм рдореИрдВ рд▓рдЧрднрдЧ рджрд╕ рджрд┐рди рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рдЖрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рд╡реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╛рдж рдХреЗ рд╕рдордп рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд▓ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрддреБрд╖реНрдЯ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдкреАрд╕реАрдЬреА рдХреЗ рд╕реА ++ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдзрдХреЗрд▓ рджрд┐рдпрд╛ ред рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдпрд╣ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ XSL RR рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ RXS M рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреНрдп рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рд╡рд░рдг

FWIW, рдирдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди (64-рдмрд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╕ рдХреЗ рд▓рд┐рдП) рд╣реИ:

uint64_t output(__uint128_t internal)
{
    uint64_t hi = internal >> 64;
    uint64_t lo = internal;

    lo |= 1;
    hi ^= hi >> 32;
    hi *= 0xda942042e4dd58b5ULL;
    hi ^= hi >> 48;
    hi *= lo;
    return hi;
}

рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди xorshift-рдЧреБрдгрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░реЛрдВ рдХреА рдкрд╕рдВрдж (рдП) рдЬрд╛рджреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ (рдмреА) рдХреНрд░рдордЪрдп рдХреЛ рдкреВрд░реНрд╡рд╡рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо-рдСрд░реНрдбрд░ рдмрд┐рдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ), рдФрд░ рдкреВрд░реЗ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ" рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдВ PCG рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ "рдЧреБрдгрд╡рддреНрддрд╛" рд╣реА рд╣реЛрддреА рд╣реИред

рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди

рдпрд╣ рднреА рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ PRNG рдХреЗ рд▓рд┐рдП 0xda942042e4dd58b5 LCG рдЧреБрдгрдХ рд╣реИ (рдФрд░ рд╕рднреА cm_ рдЙрдкрд╕рд░реНрдЧ 128-рдмрд┐рдЯ PCG рдЬрдирд░реЗрдЯрд░)ред рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 0x2360ed051fc65da44385df649fccf645 рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ pcg64 , рдЗрд╕ рдирд┐рд░рдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рднреА рд╡рд░реНрдгрдХреНрд░рдореАрдп рдкрд░реАрдХреНрд╖рдг рдЧреБрдгреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреНрд╡рд╛рд░рд╛ рдХреНрдпреЛрдВрдХрд┐ 128 рдмрд┐рдЯ ├Ч 64-рдмрд┐рдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╕реНрддрд╛ рд╣реИ 128-рдмрд┐рдЯ ├Ч 128-рдмрд┐рдЯред рдореИрдВрдиреЗ рдЗрд╕ LCG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╕реНрддреЗ-рдЧреБрдгрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдкреВрд░реНрд╡-рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░рд╛рдЬреНрдп рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рдЕрдиреБрджреЗрд╢-рд╕реНрддрд░реАрдп рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рджред

рдкрд░рд┐рдХреНрд╖рдг

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░реИрдХреНрдЯреНрд░реИрдВрдб рдФрд░ рдЯреЗрд╕реНрдЯрдпреВ 01) рдФрд░ рдореИрдВ рдЗрд╕рд╕реЗ рдЦреБрд╢ рд╣реВрдВред рдЯреЗрд╕реНрдЯ рдореЗрдВ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╢рд╛рдорд┐рд▓ рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрдВрдЧ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдпрд╛ рддреЛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реНрдЯреАрдо рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рдпрд╛ 2 ^ 64 рддрдХ рдЙрдиреНрдирдд рдФрд░ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрдВрдЯрд░рд▓рд╛рдХрд┐рдВрдЧ рдХрд░рдирд╛ - рдореИрдВрдиреЗ рдЪрд╛рд░ рдХреЗ рдПрдХ рдЧреИрдВрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ 8192 рдореЗрдВ рд╕реЗ 8 рдЯреАрдмреА рдХреЗ рдЧреИрдВрдЧ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдзрд╛рд░рд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рднреВрдорд┐ рд╕рдордХрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ)ред

рд╕реНрдкреАрдб

рдореИрдВ рдЧрддрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмрд╛рдИ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░рдХ рд╣реИрдВ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ PRNG рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдХреНрд╕рд░ рдереЛрдбрд╝рд╛ рддреЗрдЬ, рдХрднреА-рдХрднреА рдмрд╣реБрдд рддреЗрдЬ, рдФрд░ рдХрднреА-рдХрднреА рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреИрд╕реЗ рдХрд╛рд░рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдЙрдкрд▓рдмреНрдзрддрд╛

C ++ рд╣реЗрдбрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдирдП рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп _now_ рдХреЛ pcg_engines::cm_setseq_dxsm_128_64 рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ pcg64 рдХреЛ pcg_engines::setseq_xsl_rr_128_64 рдЗрд╕ рдирдИ рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрджрд▓ рджреВрдВрдЧрд╛ред рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдпреЛрдЬрдирд╛ рдЗрд╕ рд╡рд░реНрд╖ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдкреАрд╕реАрдЬреА 2.0 рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХреА рд╣реИред

рдФрдкрдЪрд╛рд░рд┐рдХ рдШреЛрд╖рдгрд╛рдПрдБ

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдЗрд╕ рдирдП рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣реЛрдВрдЧреЗ, рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реБрдПред

рддреБрдореНрд╣рд╛рд░реА рдкрд╕рдВрдж...

рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рди рдХрд░реЗрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдкреАрдб рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмреЗрд╣рддрд░ рдпрд╛ рдмреБрд░рд╛ рд╣реИред

@imneme рдХреНрдпрд╛ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдкреВрд░реЗ 64-рдмрд┐рдЯ рдЧреБрдгрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдорд┐рд▓рддрд╛ рд╣реИ? (рдЬреЛ x64 рдкрд░ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрдордЬреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдПрдХ рдзреАрдореА рдЧрддрд┐ рд╣реИред)

@ рдмреНрд▓реЗрдпрд░ : 128-рдмрд┐рдЯ ├Ч 64-рдмрд┐рдЯ рдЧреБрдгрд╛, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ x86 рдкрд░ рджреЛ рдЧреБрдгрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (64-рдмрд┐рдЯ ├Ч 64-рдмрд┐рдЯ тЖТ рдХрдо-рдмрд┐рдЯ рдмрд┐рдЯреНрд╕ рдкрд░ 128-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо, рдФрд░ 64-рдмрд┐рдЯ ├Ч 64 рдЙрдЪреНрдЪ рдХреНрд░рдо рдмрд┐рдЯреНрд╕ рдкрд░ -рдмрд┐рдЯ рдХрд░реЗрдВред рджреЛрдиреЛрдВ рдЧреБрдгрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рджреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред)

рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ 128-рдмрд┐рдЯ ├Ч 128-рдмрд┐рдЯ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдирд┐рд░реНрджреЗрд╢рди рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ ARM рдкрд░, 64-рдмрд┐рдЯ ├Ч 64-рдмрд┐рдЯ тЖТ 128-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред

(рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рджреЛ 64-рдмрд┐рдЯ рдПрд▓рд╕реАрдЬреА рдХреЛ рдПрдХ рд╕рд╛рде рдорд┐рд▓рд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рднреА PRNGs рдХрд╛ рд╕реНрдерд╛рди рдЬреЛ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред)

рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╣рд▓реНрдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо 64-рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рдкрд░:

Time to produce 1,000,000 64-bit unsigned integers
************************************************************
MT19937      5.42 ms
PCG64        2.59 ms
PCG64DXSM    2.41 ms
Philox       4.37 ms
SFC64        2.07 ms
numpy        5.41 ms
dtype: object

64-bit unsigned integers per second
************************************************************
MT19937      184.39 million
PCG64        386.01 million
PCG64DXSM    415.02 million
Philox       228.88 million
SFC64        483.94 million
numpy        184.79 million
dtype: object

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реНрд╡-рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░рд╛рдЬреНрдп рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЯрдХреНрдХрд░ рджреЗрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВред рдореИрдВрдиреЗ рдЙрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ PCG64 1.0 рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдЕрд╕рд▓реА рдЬреАрдд 128-рдмрд┐рдЯ рдПрдореБрд▓реЗрд╢рди рдХреЗ рддрд╣рдд рд╣реЛрдЧреА, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрд╕ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЗ рд▓рд┐рдП рдЕрд╕рд▓реА рд╕рд╡рд╛рд▓, @imneme , рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк 1.0 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ numpy.random.PCG64 рдХреЗ рдирд╛рдо рд╕реЗ рдХрд┐рддрдиреЗ рдирд╛рд░рд╛рдЬ рд╣реИрдВ? рд░рд┐рд▓реАрдЬ рдЖрд╕рдиреНрди рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ _think_ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рд╣рдо рдЗрд╕ рд╕рдордп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд┐рд▓реАрдЬ рдореЗрдВ PCG64DXSM рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╢рд╛рдпрдж рдкрдВрдХреНрддрд┐ рдХреЗ рдиреАрдЪреЗ рдХреБрдЫ рд░рд┐рд▓реАрдЬ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдпрд╣ рдЖрдкрдХреА рдкрд╕рдВрдж рд╣реИ!

рдореБрдЭреЗ рдЖрдкрдХреЗ рд╢рд┐рдкрд┐рдВрдЧ рдХреЗ PCG64 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЖрдП рдПрдЬ-рдХреЗрд╕-рдпреВрдЬрд╝ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдПрдХреНрд╕рдПрд╕рдПрдо рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдлрд╛рдпрджрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ), рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл, рдЗрд╕рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ рдкрд╛рд░реНрдЯреАред рдпрд╣ PRNG рд╢рд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд▓рд╛рдкрд░рд╡рд╛рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдкреБрд░рд╛рдирд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреАрд╕реАрдЬреА рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛ)ред

(рдпрд╣ рдХрд╣рд╛, рдЕрдЧрд░ рдпрд╣ _my_ рдкрд╕рдВрдж рдереЗ, рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЖрд░реЛрдкреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВ рд╢рд╛рдпрдж рдирдпрд╛ рд╣реВрдБ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрдардиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░рдирд╛ рдФрд░ Numpy рдореЗрдВ рдЪрд▓рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рдФрд░ рдЬреЛрдЦрд┐рдо рдмрд╣реБрдд рдХрдо рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рд╣реИред BigCrush рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдкреНрд░реЗрдХреНрдЯреНрд░реИрдВрдб рдХреЗ рд╕рд╛рде 16 рдЯреАрдмреА рддрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ ( cm_mcg_dxsm_64_32 рдЬреЛ рдЖрдХрд╛рд░ [рдХреЛрдИ рдзрд╛рд░рд╛, 32-рдмрд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ] рдХрд╛ рдПрдХ рдЪреМрдерд╛рдИ рд╣реИ), рдФрд░ рд╕рдВрднрд╡рдд: рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ 32 рдЯреАрдмреА рд╕реЗ рдЯрдХрд░рд╛рдПрдЧрд╛ ред)

[рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдорд┐рд▓рд╛ред рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдкреВрд░реНрд╡-рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ 128-рдмрд┐рдЯ рдЧреБрдгрдХ рдХреЗ рд╕рд╛рде 128-рдмрд┐рдЯ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рд╛рд╢рд╛рдХрд░рдг рдерд╛ред рд▓реЗрдХрд┐рди рддрдм рдореИрдВ рдЬрд┐рди рдорд╢реАрдиреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдЬрд┐рдирдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред]

рдЬрдм рдЖрдк рдЙрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк PCG64 2.0 рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

@ рд░реЗрдХрд░реНрди рдпрджрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдирд╛рдордХрд░рдг рдореБрджреНрджрд╛ рд╣реИ, рддреЛ PCG64DXSM рдФрд░ PCG64 рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдирд╣реАрдВ?

рд╕реБрдиреНрди рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ @imneme рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ 1.0 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди PCG64 рдирд╛рдо рди рджреЗрдВ рдЬрдм рд╡рд╣ C ++ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрд╕ рдирд╛рдо рдХреЗ рддрд╣рдд 2.0 рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реВрдВ рдХрд┐ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдвреАрд▓реЗ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЦрд╛рдорд┐рдпреЛрдВ рдХреЗ PCG64 рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 2.0 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ pcg-random.org рдкрд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдмреЙрдм рдЬреЗрдирдХрд┐рди рдХреЗ PRNGs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдПрдлред

PCG рдкреЗрдкрд░ рдХреА рдзрд╛рд░рд╛ 6.3 рдореЗрдВ, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджреНрдпрдкрд┐ рдЬреЗрдирд░реЗрдЯрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ mnemonic рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, PCG рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрди mnemonics рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╛рдорд┐рдд рдЬрдирд░реЗрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЙрдирдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬреИрд╕реЗ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп 32-рдмрд┐рдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП pcg32_unique)ред рдЗрд╕ рддрд░рд╣, рдЬрдм рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреА рдЦреЛрдЬреЛрдВ рдХреЗ рдХрд╛рд░рдг), рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рд╕реА рдФрд░ рд╕реА ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ

  • рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЛ рдЙрд╕рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рдирд╛рдо рд╕реЗ, рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдмрд┐рдЯ рдЖрдХрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд LCG рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЪреБрдирдиреЗ рджреЗрддрд╛ рд╣реИред
  • рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ pcg64 рдЬреИрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдирд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреВрд░реНрд╡-рдЪрдпрдирд┐рдд рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣, рдирдП рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрднреА рднреА рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдЪреНрдЪ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдерд╛ред -рд╡реЗрд▓реНрд╡ рдЙрд░реНрдл

рдпрджрд┐ рдЖрдк PCG64 PRNG рд╢рд┐рдк рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдпрд╣ рдХрд╣рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ PCG рд╕рдВрд╕реНрдХрд░рдг рд╣реИ - рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдХрд╣реЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдХреМрди рд╕рд╛ рд╕рджрд╕реНрдп рдирд┐рдореНрди рдореЗрдВ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ -рд▓реЗрд╡рд▓ рд╕реА рдпрд╛ рд╕реА ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрдирд░реЗрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕реЗ np.random.default_gen() рдореЗрдВ https://github.com/numpy/numpy/pull/13840 рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ @ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢рд╛рдпрдж рдЧреАрдерд╣рдм рдореЗрдВ рдпрд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рд╣реИред)

рдПрдХ рдорд╛рдореВрд▓реА рдирд╛рдЗрдЯ: рдЗрд╕ np.random.default_generator() рдмрдЬрд╛рдп рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? gen рдореБрдЭреЗ рдмрд╣реБрдд рдЫреЛрдЯрд╛ / рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реЛрдКрдВрдЧрд╛ рдХрд┐ рджреВрд╕рд░реЗ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп np.random.default_generator () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░, np.random.default_generator() рд▓рдВрдмреЗ рддрд░рдл рдПрдХ рдмрд╛рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ default_rng рд╕рд╛рде рдЦреЗрд▓рд╛ред

default_rng рдореБрдЭреЗ default_gen рд╕реЗ рднреА рдмреЗрд╣рддрд░ default_generator рдУрд░ рдЭреБрдХреВрдВрдЧрд╛ред

: +1: default_rng() ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕