рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рд╡рд┐рдз рдмрд╛рдЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреЗрдЦреЗрдВрдЧреЗ редрдХрд┐рд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЫрджреНрдо-рдЖрдпрд╛рдореА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдкреАрдврд╝реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдЬреЗрдбрдПрдХреНрд╕ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдпрд╛ рдПрдордПрд╕рдПрдХреНрд╕ рдЬреИрд╕реЗ рдкреБрд░рд╛рдиреЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕редC ++ рд░реИрдВрдб
рдкрд╣рд▓реА рдмрд╛рдд рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддрд╛ рд╣реИ рд╡рд╣ рд░реИрдВрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ 0 рдФрд░ RAND_MAX рдХреЗ рдмреАрдЪ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред RAND_MAX рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ stdlib.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ 32'767 рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдирдХреНрд╕ рдкрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ ( рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ )ред рдпрджрд┐ рдЖрдкрдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рд░реИрдВрдб () 32'767 (0x7FFF) рдХреЗ рднреАрддрд░ рдирдВрдмрд░ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХрд╛ рд░реИрдВрдбрдо рдирдВрдмрд░ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:int64_t A = rand();
A <<= 15;
A |= rand();
A <<= 15;
A |= rand();
A <<= 15;
A |= rand();
A <<= 3;
A |= rand() & 0b111;
рдкреБрд░рд╛рдиреЗ рд╕реА рдореЗрдВ рд░реИрдВрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛:static unsigned long int next = 1;
int rand()
{
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % 32768;
}
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рддрд░рдг рдирд╣реАрдВ рдерд╛ рдФрд░ рдЕрдм C ++ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдХ рд╕реА ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬрд┐рдирдХреА рдЪрд░реНрдЪрд╛ рдиреАрдЪреЗ рдХреА рдЧрдИ рд╣реИредрд╕реА ++ 11 рдПрд╕рдЯреАрдПрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреА рдпрд╣ рд╡рд┐рд╡рд┐рдзрддрд╛ C ++ 11 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╡рд░реНрдЧ рдХреЗ рд╕рдореВрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: minstd_rand, mt19937, ranlux, knuth_b рдФрд░ рдЙрдирдХреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБредрдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЫрджреНрдо-рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЬрдирд░реЗрдЯрд░ рдХрд╛ "рдЕрдирд╛рдЬ" рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛, рдХреБрдЫ рд░реЗрдЯреНрд░реЛ (рдФрд░ рди рдХреЗрд╡рд▓) рдЦреЗрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреАрдмреЛрд░реНрдб / рдЬреЙрдпрд╕реНрдЯрд┐рдХ рд╕реЗ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░рд╛рд▓ред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп std :: random_device рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордп (NULL) рд╕реЗ рдмреЗрд╣рддрд░ рдЕрдирд╛рдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ MinGW рд╕рдВрдХрд▓рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рднреАтАж
#include <random>
#include <ctime>
std::mt19937 engine;
engine.seed(std::time(nullptr));
int val = engine();
рдПрд╕рдЯреАрдПрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЗрдВ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░реИрдВрдб () рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдирд┐рдореНрди-рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдиреБрдХреНрд░рдо рджреЗрддреЗ рд╣реИрдВредPRNG - рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░
рдЖрдк рдЗрд╕ рдирд╛рдо рдХреЛ рд░реИрдЦрд┐рдХ рд╕рд░реНрд╡рд╛рдВрдЧрд╕рдо рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реНрдпрд╛рдп рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВред PRNG рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реА рдореЗрдВ рд░реИрдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВредunsigned PRNG()
{
static unsigned seed = 1;
seed = (seed * 73129 + 95121) % 100000;
return seed;
}
PRNG рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рддреЗрдЬрд╝ рдФрд░ рдЖрд╕рд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реА рдЕрд╡рдзрд┐ рдирд╣реАрдВ рд╣реИредXorshift
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдХрдИ рднрд┐рдиреНрдирддрд╛рдПрдВ рд╣реИрдВ, рдЕрд╡рдзрд┐ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВред XorShift рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдХрд┐рд╕реНрдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдпрд╛ Habr├й рдкрд░ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдореИрдВ 128 рдбрд┐рдЧреНрд░реА рдореЗрдВ 2 рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреВрдВрдЧрд╛редstruct seed_t
{
unsigned x = 1;
unsigned y = 123;
unsigned z = 456;
unsigned w = 768;
};
unsigned XorShift128()
{
static seed_t s;
unsigned t = s.x^(s.x<<11);
s.x = s.y;
s.y = s.z;
s.z = s.w;
s.w = (s.w^(s.w>>19)) ^ (t^(t>>8));
return s.w;
}
рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдЧреБрдгрди рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ - рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЕрд╕реЗрдВрдмрд▓рд░ рдбрд┐рд╡реАрдЬрди / рдЧреБрдгрди рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ (PIC16, Z80, 6502)редZ26 рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ 8-рдмрд┐рдЯ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ
Z26 рдПрдХ рдкреБрд░рд╛рдиреЗ Atari2600 рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдПрдХ рдПрдореБрд▓реЗрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХреЛрдб рдореЗрдВ рдЖрдк 1-рдмрд╛рдЗрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдПрдХ рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
void P2_Read_Random()
{
P2_sreg =
(((((P2_sreg & 0x80) >> 7) ^
((P2_sreg & 0x20) >> 5)) ^
(((P2_sreg & 0x10) >> 4) ^
((P2_sreg & 0x08) >> 3))) ^ 1) |
(P2_sreg << 1);
DataBus = P2_sreg;
}
рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ z80 рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рдерд╛:рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛрдб; z26
; a - output
; rdseed - 1
randz26:
exx
ld a,(rdseed)
and 20h
sra a
sra a
sra a
sra a
sra a
ld h, a
ld a,(rdseed)
and 80h
sra a
sra a
sra a
sra a
sra a
sra a
sra a
xor h
ld l, h
ld a,(rdseed)
and 08h
sra a
sra a
sra a
ld h, a
ld a,(rdseed)
and 10h
sra a
sra a
sra a
sra a
xor h
ld h, a
ld a, l
xor h
xor 1
ld h, a
ld a,(rdseed)
sla a
or h
ld (rdseed),a
exx
ret
рдЬреЛ Wingbermuehle рд╕реЗ Z80 рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ
рдпрджрд┐ рдЖрдк рдЬрд╝рд┐рд▓реЙрдЧ рд╡рд╛рд▓реА рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдЬреЛ рд╡рд┐рдВрдЧрдореНрдмрд░рдорд╣реЗрд▓ (рдХреЗрд╡рд▓ рдЬрд╝рд┐рд▓реЙрдЧ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рд╕реЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ:; By Joe Wingbermuehle
; a res 1 byte - out val
; rdseed res 1 byte - need for rand. != 0
rand8:
exx
ld hl,(rdseed)
ld a,r
ld d,a
ld e,(hl)
add hl,de
add a,l
xor h
ld (rdseed),hl
exx
ret
рдбреАрдУрдПрдо рдореЗрдВ рд░реИрдВрдбрдо рд╣рд╛рдЙрд╕ рдЬреЗрдирд░реЗрдЯрд░
рдЦреЗрд▓ рдХрдпрд╛рдордд рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдРрд╕реА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ m_random.c (рдХреЛрдб рджреЗрдЦреЗрдВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдХрд┐ "рддрд╛рд▓рд┐рдХрд╛" рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН , рдмрд┐рдЯ рдкрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕реВрддреНрд░ рдФрд░ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИрдВредрдореИрдВ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рджреВрдВрдЧрд╛ рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИредconst uint8_t random_map[] =
{
4, 1, 63, 3,
64, 22, 54, 2,
0, 52, 75, 34,
89, 100, 23, 84
};
uint8_t get_random()
{
static uint8_t index = 0;
index = (index + 1) & 0xF;
return random_map[index];
}
Z80 рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдХ; ( DOOM)
; rand_table - .
; 256 .
; a - output num
randtab:
exx
; index
ld a, (rdseed)
inc a
;and filter ; for crop array index
ld (rdseed), a
; calc array address
ld hl, rand_table
ld d, 0
ld e, a
add hl, de
ld a, (hl) ; get num from arr
exx
ret
рдмреЗрд╢рдХ, рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдЦреЗрд▓ рдХреЗ рджреМрд░рд╛рди рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рддрд╛рдХрдд рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЬрд▓реНрджреА рд╕реЗ "рдЯрд╛рдЗрдк-рд░реИрдВрдбрдо" рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред рд╡реИрд╕реЗ, рдХреНрд╡реЗрдХ 3 рдореЗрдВ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ - рд░реИрдВрдб () рдФрд░ 0x7FFFредRDRAND
рдХреБрдЫ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХрд▓ рдХреЛрдбрд░ рдЕрдиреБрджреЗрд╢ - RDRAND рдХреЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред C ++ рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдЖрд╡реЗрд╖рдг рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЬреАрд╕реАрд╕реА рдореЗрдВ Immintrin.h рдлрд╝рд╛рдЗрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ _rdrandXX_step рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ XX рдХрд╛ рдЕрд░реНрде рд╣реИ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ 16, 32 рдпрд╛ 64 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред#include <immintrin.h>
unsigned val;
_rdrand32_step(&val);
рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдиреЗ -mrdrnd рдзреНрд╡рдЬ рдХреЛ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ / рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рддрд╛рдХрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВредрд╕рдорд╛рдкрди
рдПрд╕рдЯреАрдПрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ std :: minstd_rand рд╡рд░реНрдЧ рд╕рд╛рдзрд╛рд░рдг рд░реИрдВрдб () рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрди рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд┐рдиреНрдЯрдб рдореЗрдВ рдЕрд╡рдзрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрд╡рд┐рд╖рдп рдкрд░ Infa
- рд╕реА ++ 11 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ: рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреАрдврд╝реА
- рдПрд╕рдЯреАрдПрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВ? рдирд┐рд░реНрд╡рд╛рд╕рди
- рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд╕рд╛рде XorShift рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдХреА рд▓реЗрдЦ: tyk
- рдЧрд┐рдЯ рдПрдореНрдпреВрд▓реЗрдЯрд░ z26ред рдлрд╝рд╛рдЗрд▓ c_pitfall2.c рдореЗрдВ рд░реИрдВрдбрдо рдХреЛрдб: git
- рджрдордЪрд┐рдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЬрдирд░реЗрдЯрд░: рдЧрд┐рдЯ
PS рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦред рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВ, рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ / рдХрдо рдХрд░рдирд╛ рд╣реИ