Based on: http://www.electro-tech-online.com/threads/ultra-fast-pseudorandom-number-generator-for-8-bit.124249/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
unsigned int _x;
unsigned int _a;
unsigned int _b;
unsigned int _c;
void initRandom(unsigned int s1,unsigned int s2,unsigned int s3, unsigned int x0)
{
_x = x0;
_a = s1;
_b = s2;
_c = s3;
_x++;
_a = (_a^_c^_x);
_b = (_b+_a);
_c = ((_c+(_b>>1))^_a);
}
unsigned int random()
{
_x++;
_a = (_a^_c^_x);
_b = (_b+_a);
_c = ((_c+(_b>>1))^_a);
return _c;
}
|