Advertisement
tm512

XORShift

Oct 11th, 2011
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. static uint32_t rs [4];
  5.  
  6. void seedrand (uint32_t seed)
  7. {
  8.     rs [0] = seed;
  9.     rs [1] = seed << 1;
  10.     rs [2] = seed & rs [1];
  11.     rs [3] = rs [1] & ~rs [2];
  12.  
  13.     printf ("Using %u, %u, %u, and %u as seeds.\n", rs [0], rs [1], rs [2], rs [3]);
  14.     return;
  15. }
  16.  
  17. uint32_t getrand (void)
  18. {
  19.     uint32_t tmp;
  20.  
  21.     tmp = rs [0] ^ (rs [0] << 5);
  22.  
  23.     rs [0] = rs [1];
  24.     rs [1] = rs [2];
  25.     rs [2] = rs [3];
  26.  
  27.     return rs [3] = (rs [3] ^ (rs [3] >> 12)) ^ (tmp ^ (tmp >> 16));
  28. }
  29.  
  30. int results [16];
  31.  
  32. int main (void)
  33. {
  34.     int i;
  35.  
  36.     printf ("Testing random number generator\n");
  37.     seedrand (time (NULL));
  38.  
  39.     for (i = 0; i < 700000; i++)
  40.         results [getrand () & 15] ++;
  41.  
  42.     for (i = 0; i < 16; i++)
  43.         printf ("%i: %i\n", i, results [i]);
  44.  
  45.     return 0;
  46. }
  47.  
  48.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement