Advertisement
tm512

XORShift 2

Oct 15th, 2011
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 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] = (rs [0] ^ (rs [0] << 3)) ^ (rs [1] ^ (rs [1] << 16));
  11. rs [3] = (rs [0] ^ (rs [0] << 6)) ^ (rs [2] ^ (rs [2] << 10));
  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 [256];
  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 < 7000000; i++)
  40. results [getrand () & 255] ++;
  41.  
  42. for (i = 0; i < 256; 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