Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int seeded_rand(int seed, int low, int high, int position){
- int next;
- int but = 2**31;
- int bot = 2**16;
- int[int] s;
- int place = 0;
- void srand(int x){
- clear(s);
- //probably wants to be an unsigned int (i.e. in range [0,2**32-1]) based on php-src/ext/standard/rand.c lines 44-52
- s[0] = x;
- for i from 1 to 30{
- s[i] = (s[i-1] * 16807) % (but-1);
- }
- for i from 31 to 33{
- s[i] = s[i-31];
- }
- for i from 34 to (344+position+1){
- s[i] = (s[i-3] + s[i-31]) % (2*but);
- }
- }
- int rand(int min, int max, int place){
- //LCG stuff:
- //from IBM and C and POSIX
- //next = (1103515245 * next + 12345);
- //next %= but;
- //next &= but-bot;
- //from some other C thing
- //next = (1103515245 * next + 12345);
- //next %= but*2;
- //next &= but-bot;
- //from MS Visual C
- //next = (214013 * next + 2531011);
- //next %= 2*but;
- //next &= but-bot;
- //glibc implementation
- next = s[344+place] >> 1;
- return (min + ( max - min + 1 ) * ( next / ( (but -1) + 1.0))) ;
- //return (next);
- }
- srand(seed);
- return rand(low, high, position);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement